c++ - 我们如何才能让字符数组在 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;
}
解决方案
正如一些程序员花花公子所说,使用 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 会有很大帮助。
推荐阅读
- python - 在 QuantLib 和 Python 中摊销浮动利率债券的定价信用损失
- asp.net - 使用 Azure AD 身份验证在 Blazor 应用程序上获取未配置的回复 URL 错误
- php - PHP 计算变量名
- python - 我可以使用 pandas 的 pivot_table 来聚合缺少值的列吗?
- csv - CSV 文件中 SSIS 上的数值数据溢出
- python - (更新进度)使用 Matplotlib 单选按钮在等高线图之间切换 [Python]
- python - pyspark - 使用 json 变量中定义的元数据动态类型转换和别名
- javascript - 单击下拉选项时触发事件
- java - BufferedReader.read(char[], int, int) 可以返回 0 吗?
- node.js - Firebase Functions 部署错误,已重新安装依赖项和同步包