2010-11-29 91 views
0

从文件中读取一行并将该行分成标记后,我需要检查标记是否只包含字母字符[a-zA-Z]。 C标准库中是否有某种功能来检查?我可以使用regex.h来检查这个,但我认为这是夸大了。C标准库函数检查char *是否是一个单词?

当然,我可以编写一个循环遍历令牌并检查每个字符的函数,但我不想重新发明轮子。

P.S .:使用第三方库不是一个选项。

+7

C很简约。 “不想重塑”和“第三方图书馆不是一种选择”不能相互融合。 – 2010-11-29 14:42:21

+0

@ J-16在一个真实世界的项目中,我当然会使用第三方库,但这仅限于标准库中的作业:-( – helpermethod 2010-11-29 15:04:12

+1

[s] scanf(“%[a-zA -Z])也许? – Nyan 2010-11-29 15:13:20

回答

6

肯定:

#include <ctype.h> 

int isalpha(int ch) // is alphabetic? 
int isalnum(int ch) // is alphanumeric? 
+5

显然你需要通过你的char * – 2010-11-29 14:43:56

3

您已经ctype.h

int isalnum(int c); 
    int isalpha(int c); 
    int iscntrl(int c); 
    int isdigit(int c); 
    int isgraph(int c); 
    int islower(int c); 
    int isprint(int c); 
    int ispunct(int c); 
    int isspace(int c); 
    int isupper(int c); 
    int isxdigit(int c); 
3

定义的所有这些功能,如科斯,isalpha(int ch)isalnum(int ch)规定,但这些都不是字符*的功能。用isalpha和alnum编码你自己应该很容易,但你必须小心:如果你要处理特殊字符,请检查你的语言环境(isalpha取决于它们)。

3

Strspn将完成这项工作。

基本的概念是,你给它一个字符串,并返回包含特定列表中字符的最长片段的长度。 将a-z和A-Z添加到该列表中。如果从strspn返回的值与strlen相同,那么您很好。