验证字符串是否至少包含一个字母
Verify if string contains at least one letter
你好,我试图检查字符串是否至少包含一个字母,但在这个阶段不起作用。如果我输入 13,它将继续而不会给我错误,是否包含数字并不重要,我只需要至少一个字母,例如:Patrick1 没关系。
这是我正在尝试的代码:
void setName(string b) {
cout << "Please enter your name:" << endl;
getline(cin, b);
for (int i =0; i<b.size(); i++) {
if ((b[i] >= 'A' && b[i] <= 'Z') ||
(b[i] >= 'a' && b[i] <= 'z')) {
cout << "Error" << endl;
cout << "Please enter your name:" << endl;
getline(cin, b);
}
任何建议谢谢大家!
C++标准库有许多不错的算法函数,例如一个名为 std::any_of
如果传递到的范围中的任何元素导致谓词返回true
,它将返回true
。
可以与这样的::isalpha
一起使用
if (std::any_of(std::begin(b), std::end(b), ::isalpha))
{
// There is at least one alphabetic character in the string
}
重要说明:std::any_of
函数是在 C++11 中引入的。某些编译器需要特殊标志才能启用 C++11。非常旧的编译器和标准库可能根本没有该功能。
请尽量避免重复自己(就像你对"getline"所做的那样)
如果有必要,请重新考虑您的算法...在您的情况下,它可以是"在没有输入正确名称的情况下重复输入"之类的内容,可以完全按照这种方式编码:
这样,如果你想在位置 A 中更改代码,您不能忘记在位置 B 中更改它(以及您最终将其复制到的所有其他地方);-)
#include <algorithm>
#include <iostream>
#include <cctype>
void setName(std::string& b) {
bool isValidName=false; // nothing entered yet
while ( !isValidName )
{
std::cout << "Please enter your name:" << std::endl;
std::getline(std::cin, b);
if (std::any_of(std::begin(b), std::end(b), ::isalpha)) {
isValidName=true; // correct name entered
}
else {
std::cout << "Error" << std::endl;
}
}
}
int main() {
std::string name;
setName(name);
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
相关文章:
- QWidget findChildren 当对象名称包含特定字符串时
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- 如何制作包含原始字符串终止符C++原始字符串
- 如何在文件中搜索字符串并打印包含该字符串的行
- 严重包含在字符串中,除非我将其存储在类C++
- 我如何知道 boost::any 是否包含文字字符串
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 至少包含一次字符 X 的 S 的不同子字符串的数量
- 返回类型 char* 的成员函数返回在 while 循环后包含不同字符串的地址
- 检查从查询返回的任何行是否包含在字符串中的最高性能方法?
- C++包含一组对象的类
- 如何对包含 "->" 的字符串进行 grep
- 从 mongodb 读取包含 \" 的字符串
- 如何在文件中搜索关键字,然后打印其中包含的字符串
- 按字典顺序从范围中获取下一个数字(不包含所有字符串的容器)
- 为什么包含std::字符串流的类的移动语义会导致编译器错误
- C++ DLL 仅读取安全数组中包含的字符串的第一个字符
- 查找包含给定字符串的数组的最佳方法
- 我想在C++项目中包含一种脚本语言.Lua vs Bison/Yacc