do{
std::cout << "Name? \n";
std::cin >> Name1;
getchar();
}while();
如何检查用户输入的是名称而不是数字?我尝试了cin.fail(),但似乎没有用。如果用户输入的是字符,基本上我想做的就是循环,例如:,。 +-等...或数字(0,1,2,4 ...),如果有一种方法可以做while(Name1!= std :: string)
答案 0 :(得分:1)
正如其他人所建议的那样,可以用不同程度的难度来解决您的问题。
如果您将有效名称定义为不包含特殊字符或数字的字符串(即+-。0 ... 9等),则可以编写一个函数来检查输入的字符串是否仅包含字母字符。一种实现方法是使用std::isalpha
如果您已经阅读了sudo systemctl restart nginx
的链接参考,您将看到它检查给定字符是否为字母字符。您还可以获得方法std::isalpha
的实现,该实现计算一个字符串中有多少个字符。
您可以检查引用count_alphas(const std::string& s)
here,并且需要包括std::count_if
才能使用。
<algorithm>
使用这种方法,您可以按照以下步骤完成代码
int count_alphas(const std::string& s)
{
return std::count_if(s.begin(), s.end(), [](unsigned char c){
return std::isalpha(c);
});
}
如果条件为true,则意味着您的字符串中的字母字符少于字符串的长度,因此您的名称不是您定义的有效名称。
如果您发现非字母字符,也可以使用std::find_if
代替do{
std::cout << "Name? \n";
std::cin >> Name1;
getchar();
}while(Name1.length() != count_alphas(Name1));
直接返回false,您可以尝试自己实现。
如果您不习惯使用算法或lambda,则可以存储不使用的内容
不想以有效名称出现在字符串向量中,并遍历输入名称以查看是否包含向量的任何存储元素。如果是这样,则它现在是有效名称。
答案 1 :(得分:0)
您可以使用正则表达式检查输入是否有效。
#include <regex>
#include <string>
#include <iostream>
int main()
{
std::regex name("[[:alpha:]]+"); // Match 1 or more alphabetic characters
while (true)
{
std::string input;
std::cout << "Enter name: " << std::endl;
std::getline(std::cin, input);
if (std::regex_match(input, name))
std::cout << "Input is a name" << std::endl;
else
std::cout << "Input is not a name" << std::endl;
}
return 0;
}
的语法。