我正在运行一个循环来测试一个打字字符是否是一个字母。我希望像sql中的“IN”函数或者提供类似功能的方式 - 除了(变量=='A'||'a'||'B'||'b'||'C'| |'c'...)当然。我的意思是使用伪代码的一个例子是:
char c;
while ((c = getchar()) != EOF)
{
if (c == 'upper or lower case letter')
{
runthis();
}
else
{
dothis();
}
}
感谢。
答案 0 :(得分:2)
如何调用isalpha()
函数?
char c;
while ((c = getchar()) != EOF)
{
if (isalpha((unsigned)c))
{
runthis();
}
else
{
dothis();
}
}
确保您已添加<ctype.h>
标题!此标头包含其他类似的功能,如islower()
和isupper()
,它们分别告诉您字符是小写字母还是大写字母,isdigit()
告诉您是否字符是一个数字。
答案 1 :(得分:1)
使用isalpha
标头文件中的ctype.h
功能。请参阅此处的documentation。
用法:
#include <ctype.h>
...
if (isalpha(c))
{
runthis();
}
else
{
dothat();
}
答案 2 :(得分:1)
您可以使用isalpha()
:
#include <ctype.h>
int main(void)
{
printf("%d\n", isalpha('x'));
printf("%d\n", isalpha('5'));
}
此系列中有多种功能,例如isupper()
,islower()
,isalnum()
,isdigit()
,isspace()
。
答案 3 :(得分:0)
C有一个名为isalpha
的函数来处理你的情况。
答案 4 :(得分:0)
解决标题中的问题(但对于此范围连续的情况不太理想)。
整数类型(char
,short
,int
,enum
,...)的更一般答案是使用switch
/ {{ 1}}并利用堕落行为:
case
当然,您可以将案例包装在函数中以创建自己的switch (foo) {
case SOME_VALUE:
case ANOTHER_VALUE:
case COMMON_VALUE:
case NOT_SO_COMMON_VALUE:
dowhatever(foo);
break;
default:
dotheotherthing(foo);
break;
}
函数(与标准库函数iscategory()
,isspace()
等)并行。只需isalpha()
获取正确的值,而不是呼唤......
答案 5 :(得分:0)
有一整组字符分类函数。他们的名字很容易说明:
int isalnum(int c) // Equivalent to isalpha(c) || isdigit(c)
int isalpha(int c) // Letters
int isblank(int c) // Space or tab
int iscntrl(int c) // Control character
int isdigit(int c) // Digit
int isgraph(int c) // Printable character that's not space
int islower(int c) // Lowercase letter
int isprint(int c) // Printable characters including space
int ispunct(int c) // Printable characters except space and alphanumeric
int isspace(int c) // Checks for whitespace characters according to the locale
int isupper(int c) // Uppercase letters
int isxdigit(int c) // Hexadecimal digits
中进行了解
如果以上都不满足您的需要,则可以使用strchr()
创建自己的文件。示例:
// Check if c is a lowercase vowel
char lcvowel[] = "aeiouy";
if(strchr(lcvowel, c)) {
如果您经常使用此类功能,请创建包装器:
int islowervowel(int c) {
return schr("aeiouy", c);
}
Posix具有上面未列出的一项功能
int isascii(int c) // 7-bit ascii character set
我猜它不包含在标准C中的原因是C不假定ascii编码。也许他们只是觉得它没有足够的用处。不过,您可以在这里阅读有关此内容(以及所有其他内容)的信息:https://linux.die.net/man/3/isascii
答案 6 :(得分:-1)
我可以想到两个快速的方法。
首先,如果所有字符都在一个范围内,则可以与范围的边界进行比较。
if (c >= 'a' && c <= 'z')
另一种方法是使用一个查找表,该表为每个字符预先填充布尔值,以声明它是否具有所需的属性。
请注意,这个答案适用于一般情况 - 许多特定情况都有现有的库函数,例如确定字母字符。