gpt4 book ai didi

c - 如何在C中检测Char中的空格和字母?

转载 作者:行者123 更新时间:2023-11-30 18:24:13 26 4
gpt4 key购买 nike

你知道如何检测 CHAR 变量中的空格和字母吗?

我需要检测数字输入中的字母或空格:

这就是我想做的:

Enter Document Number of 8 numbers: 
// i press space and pressed enter
ERROR: please enter the age again: 4fpdpfsg

我的代码没有检测到 4 之后的字母,而我想要的是识别输入中有字母,然后只显示 4。

int isLetter(char input[]){
int i = 0;

while(input[i]!='\0'){
if((input[i]!=' ') && (input[i]<'a'||input[i]>'z') && (input[i]<'A'||input[i]>'Z'))
return 0;
i++;
}

return 1;
}

最佳答案

标准C库具有各种字符类型测试函数。它们在 #include <ctype.h> 中声明 header 。

不幸的是,使用这些函数的明显方式常常是错误的。他们采用 int 类型的参数实际上预计它是一个无符号字符值(实际上是一个字节),范围在 0 到 UCHAR_MAX 之间。 。如果你传入 char值恰好为负,未定义的行为随之而来,这可能巧合crash 或更糟形成类似于heartbleed的漏洞(可能更糟)

因此转换为 (unsigned char)在以下情况中很可能是必要的:

#include <ctype.h>
/* ... */
char ch;
/* ... */
if (isalpha((unsigned char) ch) || ch == ' ') {
/* ch is an alphabetic character, or a space */
}

从 C 翻译时字符集派生的简单字符常量(不是数字转义常量)在执行环境中具有正值;可以安全地假设它只操作这些字符的代码可以不用强制转换。 (例如,如果程序操作的所有数据都来自程序本身的字符串或字 rune 字,并且所有这些文字只使用基本的 C 翻译时字符集。)

也就是说isalpha('a')是安全的; a位于 C 翻译时字符集中,因此字符常量 'a' 的值是积极的。但是假设您正在使用 ISO-8859-1 中的源代码并且有 char ch = 'à'; 。如果char已签名,此ch将具有负值,根据 ISO C,这很好,因为重音 à 不在基本 C 翻译字符集中。表达式isalpha(ch);然后将负值传递给 isalpha函数,这是错误的。

关于c - 如何在C中检测Char中的空格和字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com