Hey im trying to validate a string. Basically what i want it to do is prevent the user from entering anything other than a string. Here is my code:
**getString**
string getString(string str)
{
string input;
do
{
cout << str.c_str() << endl;
cin >> input;
}
while(!isalpha(input));
return input;
}
Errors
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:\Users\Conor\Documents\College\DKIT - Year 2 - Repeat\DKIT - Year 2 - Semester 1 - Repeat\Games Programming\MaroonedCA2\MaroonedCA2\Player.obj MaroonedCA2
Error 3 error LNK1120: 1 unresolved externals C:\Users\Conor\Documents\College\DKIT - Year 2 - Repeat\DKIT - Year 2 - Semester 1 - Repeat\Games Programming\MaroonedCA2\Debug\MaroonedCA2.exe MaroonedCA2
4 IntelliSense: no suitable conversion function from "std::string" to "int" exists c:\Users\Conor\Documents\College\DKIT - Year 2 - Repeat\DKIT - Year 2 - Semester 1 - Repeat\Games Programming\MaroonedCA2\MaroonedCA2\Validator.cpp 72 17 MaroonedCA2
Main
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";
New getString function.
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;
}
The first problem described is that this function belongs to a class, but you forgot to specify that:
Next,
isalphatakes anint(due to C reasons), and, as far as I know, there is no version forstd::string. You can, however, use standard algorithms to do this:This
find_if_notcall will search through the string and check if any non-alpha characters are found by comparing the return value to the ending iterator of the string. If they’re equal, the string is clean. You might also have to castisalphabecause it expects a predicate taking achar, not anint.For some samples using this algorithm, see here. Note that due to the version of GCC on there,
std::begin()andstd::end()were replaced, and the!=was changed to==due to the reversed logic of the function (you’d use it likedo {} while (!ok(...));).