字符串验证函数出错
Error with string validation function
嘿,我试图验证一个字符串。 基本上,我希望它做的是防止用户输入字符串以外的任何内容。 这是我的代码:
**getString**
string getString(string str)
{
string input;
do
{
cout << str.c_str() << endl;
cin >> input;
}
while(!isalpha(input));
return input;
}
错误
Error 2 error LNK2019: unresolved external symbol "public: bool __thiscall Validator::getString(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?getString@Validator@@QAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: void __thiscall Player::information(void)" (?information@Player@@QAEXXZ) C:UsersConorDocumentsCollegeDKIT - Year 2 - RepeatDKIT - Year 2 - Semester 1 - RepeatGames ProgrammingMaroonedCA2MaroonedCA2Player.obj MaroonedCA2
Error 3 error LNK1120: 1 unresolved externals C:UsersConorDocumentsCollegeDKIT - Year 2 - RepeatDKIT - Year 2 - Semester 1 - RepeatGames ProgrammingMaroonedCA2DebugMaroonedCA2.exe MaroonedCA2
4 IntelliSense: no suitable conversion function from "std::string" to "int" exists c:UsersConorDocumentsCollegeDKIT - Year 2 - RepeatDKIT - Year 2 - Semester 1 - RepeatGames ProgrammingMaroonedCA2MaroonedCA2Validator.cpp 72 17 MaroonedCA2
主要
cout << "What is your name ?n";
name = validator.getString();<------This skips.
cout << "nWhat is your age? ";
age = validator.getNum();
string character = "What is your sex M/F?";
sex = validator.getChar(character);
cout <<"Name:n"<< name<<" Age:n" << age<< " Sex:n"<< sex <<"n";
新的 getString 函数。
string Validator :: getString()
{
string input;
do
{
}
while (
std::find_if_not(
std::begin(input), //from beginning
std::end(input), //to end
isalpha //check for non-alpha characters
) != std::end(input) //continue if non-alpha character is found
);
return input;
}
描述的第一个问题是此函数属于一个类,但您忘记指定:
string Validator::getString(string str)
^^^^^^^^^^^
接下来,isalpha
需要int
(由于 C 原因),据我所知,没有std::string
的版本。但是,您可以使用标准算法来执行此操作:
do {
...
} while (
std::find_if_not(
std::begin(input), //from beginning
std::end(input), //to end
isalpha //check for non-alpha characters
) != std::end(input) //continue if non-alpha character is found
);
此find_if_not
调用将搜索字符串,并通过将返回值与字符串的结束迭代器进行比较来检查是否找到任何非字母字符。如果它们相等,则字符串是干净的。您可能还必须强制转换isalpha
因为它期望谓词采用char
,而不是int
。
有关使用此算法的一些示例,请参阅此处。请注意,由于那里的 GCC 版本,std::begin()
和 std::end()
被替换,并且由于函数的逻辑相反,!=
更改为 ==
(你会像do {} while (!ok(...));
一样使用它)。
isalpha
接受整数而不是字符串。
确保字符串中的每个字符都是字母的一种方法是执行类似操作。
bool isAlpha = false;
while (!isAlpha) {
// take in input blah blah
isAlpha = true;
for (unsigned i = 0; i < input.length(); ++i) {
if (!isalpha(input[i]))
isAlpha = false;
}
}
更有效的方法是使用 std::string
函数在字符串中搜索数字:
static const char digits[] = "0123456789";
isAlpha = text.find_first_of(digits, 0); // start from position 0.
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- PrintWindow函数在notepad.exe中出错
- 使用运算符调用 void 函数时出错<set>
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 在定义的函数中使用常量时出错
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 使用根/C++时出错:没有匹配的构造函数来初始化'TTree'
- Arduino IDE 中使用 strncmp 函数时出错
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 使用一个参数的模板函数时出错(适用于 2)
- 为什么 stl 字符串C++函数有时出错有时会出错?
- 使用类的构造函数时出错
- 在 c++ 的构造函数中分配对象向量时出错
- 为什么在函数参数前面添加 const 会出错?
- 调用析构函数时出错