首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言合法标识符解决方案

2012-03-01 
C语言合法标识符C语言合法标识符时限:1000ms 内存限制:10000K总时限:3000ms描述:输入一个字符串,判断其是

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


[解决办法]

C/C++ code
#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;} 

热点排行