0

嘿,我试图验证一个字符串。基本上我想要它做的是防止用户输入字符串以外的任何内容。这是我的代码:

**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:\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

主要的

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;
}
4

3 回答 3

2

描述的第一个问题是该函数属于一个类,但您忘记指定:

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(...));

于 2012-11-28T19:27:39.387 回答
1

isalpha接受一个 int 而不是一个字符串。

确保字符串中的每个字符都是字母的一种方法是执行类似的操作。

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;
    }
}
于 2012-11-28T19:10:45.073 回答
0

std::string一种更有效的方法是使用以下函数 在字符串中搜索数字:

static const char digits[] = "0123456789";
isAlpha = text.find_first_of(digits, 0); // start from position 0.
于 2012-11-28T20:51:07.750 回答