仅接受字母/字母输入变量,如果不是字母则重新提示

时间:2018-02-24 00:39:54

标签: c++

我被困在这两天了。我在谷歌搜索了第20页,但无法弄清楚这一点。

我只需要接受townName上输入的字母。

我尝试了各种循环方式(我能想到或找到)。另外,我读过isalpha()仅适用于角色。但是,我已经搜索并实现了将字符串从输入转换为字符的方法,我只是无处可去。

这是我的最后一次尝试:

// Input, validate, and set string name of town 
cout << "Enter name of town: "; 
getline(cin, townName); 
cin >> townName; cin.ignore();

while (townName != isalpha()) {
    cout << "Enter the town name - alphabet only.";
    cin >> townName; }

我现在意识到这不是isalpha的正确用法。我也试过isalpha(townName),使用bool但我需要返回一个提示重新输入,如果它包含除alpha / white空格以外的任何内容,并且如果它只是alpha继续使用main。

1 个答案:

答案 0 :(得分:1)

你有点走上正轨。您需要使用isalpha检查字符串的每个字符。你甚至可能想要允许空格,即&#34;纽约&#34;等等。?我建议编写自己的方法,在整个输入字符串的循环中执行此操作。把整个事情放在一个while循环中,你应该全力以赴做你想做的事。

#include <iostream>
#include <string>
#include <cctype>

// check for only alphabetical letters in string (or spaces)
bool lettersOrSpaces(const std::string& str)
{
    for (size_t i = 0; i < str.size(); i++)
    {
        // make sure each character is A-Z or a space
        if (! std::isalpha(str[i]) && ! std::isspace(str[i]))
        {
            return false; ///< at least one "no match"
        }
    }
    return true;  ///< all characters meet criteria
}

int main()
{
    std::string townName;
    std::cout << "Enter name of town: ";
    while (std::getline(std::cin, townName) && !lettersOrSpaces(townName))
    {
        std::cout << "Enter the town name - alphabet only: ";
    }
    std::cout << "The name of town is: " << townName << std::endl;

    return 0;
}