C语言合法标识符
C语言合法标识符
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输入一个字符串,判断其是否是C的合法标识符。
你可以参考以下命名规则:
1.由英文字母、数字、下划线组成;
2.用英文字母、下划线打头。
3.不能与系统保留字关键字冲突。
由ANSI标准定义的C语言关键字共32个 :
auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static
输入:
输入一行不超过50个字符的字符串。
输出:
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
输入样例:
12ajf
fi8x_a
sizeof
ff ai_2
输出样例:
no
yes
no
no
[解决办法]
#include <ctype.h>#include <stdio.h>#include <string.h>const char *keywords[] = { "auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while"};int iskeyword(const char *str){ int i; for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); i++) { if (!strcmp(str, keywords[i])) return 1; } return 0;}int isidentifier(const char *str){ int i; int len; len = strlen(str); if (!isalpha(str[0]) && str[0] != '_') return 0; for (i = 1; i < len; i++) if (!isalnum(str[i]) && str[i] != '_') return 0; return 1;}int main(void){ int len; char word[50 + 1]; while (fgets(word, sizeof(word), stdin)) { len = strlen(word); word[len - 1] = '\0'; if (!iskeyword(word) && isidentifier(word)) { printf("%s: %s\n", word, "yes"); } else { printf("%s: %s\n", word, "no"); } } return 0;}