作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
do{
std::cout << "Name? \n";
std::cin >> Name1;
getchar();
}while();
如何检查用户输入的是姓名而不是数字?我试过 cin.fail() 但它似乎不起作用。基本上我想做的就是在用户输入是字符时循环,比如: , 。 + - 等等...或数字(0、1、2、4...),如果有一种方法可以做到 while(Name1 != std::string)
最佳答案
正如其他人所建议的,您的问题可以用不同的难度来解决。
如果您将有效名称定义为不包含特殊字符或数字(即 +-. 0...9 等)的字符串,那么您可以编写一个函数来检查输入的字符串是否仅包含字母字符。一种方法是使用 std::isalpha
如果您已阅读 std::isalpha
的链接引用,您会看到它检查给定字符是否为字母字符。你也有方法的实现 count_alphas(const std::string& s)
计算字符串中有多少个字符。
您可以查看引用 std::count_if
here你需要包括 <algorithm>
使用它。
int count_alphas(const std::string& s)
{
return std::count_if(s.begin(), s.end(), [](unsigned char c){
return std::isalpha(c);
});
}
使用这个方法,你可以完成你的代码如下
do{
std::cout << "Name? \n";
std::cin >> Name1;
getchar();
}while(Name1.length() != count_alphas(Name1));
如果条件为真,这意味着您的字符串中的字母字符少于字符串的长度,因此您的名称不是您定义的有效名称。
您还可以使用 std::find_if
而不是 std::count_if
如果你找到一个非字母字符直接返回 false,你可以尝试自己实现。
如果您不习惯使用算法或 lambda,您可以存储您不喜欢的东西
不想在您的有效名称中出现在字符串 vector 中并遍历输入名称以查看是否包含 vector 的任何存储元素。如果是,则它现在是一个有效的名称。
关于c++ - 如何检查输入是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52380619/
我是一名优秀的程序员,十分优秀!