- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你知道如何检测 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/
我是一名优秀的程序员,十分优秀!