从文件中读取一行并将该行分成标记后,我需要检查标记是否只包含字母字符[a-zA-Z]。 C标准库中是否有某种功能来检查?我可以使用regex.h来检查这个,但我认为这是夸大了。C标准库函数检查char *是否是一个单词?
当然,我可以编写一个循环遍历令牌并检查每个字符的函数,但我不想重新发明轮子。
P.S .:使用第三方库不是一个选项。
从文件中读取一行并将该行分成标记后,我需要检查标记是否只包含字母字符[a-zA-Z]。 C标准库中是否有某种功能来检查?我可以使用regex.h来检查这个,但我认为这是夸大了。C标准库函数检查char *是否是一个单词?
当然,我可以编写一个循环遍历令牌并检查每个字符的函数,但我不想重新发明轮子。
P.S .:使用第三方库不是一个选项。
肯定:
#include <ctype.h>
int isalpha(int ch) // is alphabetic?
int isalnum(int ch) // is alphanumeric?
显然你需要通过你的char * – 2010-11-29 14:43:56
C标准库是对char *相关的功能很短。请检查该链接以查看是否anythings帮助: http://www.cplusplus.com/reference/clibrary/cstring/
您已经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);
定义的所有这些功能,如科斯,isalpha(int ch)
和isalnum(int ch)
规定,但这些都不是字符*的功能。用isalpha和alnum编码你自己应该很容易,但你必须小心:如果你要处理特殊字符,请检查你的语言环境(isalpha取决于它们)。
Strspn将完成这项工作。
基本的概念是,你给它一个字符串,并返回包含特定列表中字符的最长片段的长度。 将a-z和A-Z添加到该列表中。如果从strspn返回的值与strlen相同,那么您很好。
C很简约。 “不想重塑”和“第三方图书馆不是一种选择”不能相互融合。 – 2010-11-29 14:42:21
@ J-16在一个真实世界的项目中,我当然会使用第三方库,但这仅限于标准库中的作业:-( – helpermethod 2010-11-29 15:04:12
[s] scanf(“%[a-zA -Z])也许? – Nyan 2010-11-29 15:13:20