验证字符串是否至少包含一个字母

Verify if string contains at least one letter

本文关键字:包含一 字符串 是否 验证      更新时间:2023-10-16

你好,我试图检查字符串是否至少包含一个字母,但在这个阶段不起作用。如果我输入 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;
}