首页 > 解决方案 > 我们如何才能让字符数组在 C++ 中只接受字母

问题描述

我想在 C++ 的字符数组中只输入字母。如果输入的所有字符都是字母,则必须返回 true,否则如果有任何字符不是字母,则返回 false。例如 有效输入:“AbcdefGH”最多 20 个字符 无效输入:“AbcD12hyK” 我尝试了以下方法,但没有得到所需的输出。请帮忙。

#include<iostream>
using namespace std;
bool isValidName(char myInput[]);
int main(){
    char name[20];  
    cout<<"Enter  Name: ";
    cin.getline(name,20);
    bool input = isValidName(name);
    cout<<"Name : "<<input<<endl;   
}
bool isValidName(char myInput[])
{
    for(int i=0; i<20; i++)
    {
        if(!isalpha(myInput[i])){
            return false;
        }
    }
    return true;
}

标签: c++validation

解决方案


正如一些程序员花花公子所说,使用 std::string 要好得多。这里的问题是你的 for 循环isValidName()总是检查 20 个字符,但不会总是有 20 个字符传入myInput

查看 cin::getline的文档:

如果 n 大于零,即使提取了空字符串,也会自动将空字符 ('\0') 附加到写入的序列中。

这意味着您的 20 长度的 char 数组可能如下所示:

['a','b','c','\0', 未定义...]

当您的函数检查所有 20 个字符时,您将检查未定义的字符,这些字符可能不是字母字符。因此,您的函数没有提供正确的输出。我稍微更改了您的代码并获得了所需的输出。

bool isValidName(char myInput[])
{
    for(int i=0; i<20; i++)
    {
        if (myInput[i] == '\0') {
            break;
        }
        if(!isalpha(myInput[i])){
            return false;
        }
    }
    return true;
}

另请注意,您的 char 数组在您的输入中只能包含 19 个有用的字符,因为您还需要一个最终的终止空字符。使用 std::string 会有很大帮助。


推荐阅读