问题链接:HDU2024 C语言合法标识符。入门训练题,用C语言编写程序。
问题简述:参见上述链接。
问题分析:C语言的标识符是字母或下划线('_')开头的,字母、下划线('_')和数字的字符串。
程序说明:本来是用函数scanf()读入字符串的,但是空行(直接输入回车)时,有个小陷阱。所以,改用函数gets(),AC通过。这事情有点费解,细节决定成败。
用字符指针来处理应该是正解。求字符串长度,用for循环语句来出来需要两次查看字符串。
AC的C语言程序如下:
/* HDU2024 C语言合法标识符 */ #include <stdio.h> #include <ctype.h> int main(void) { int n; char s[50+1], *t; gets(s); n = atoi(s); while(n--) { gets(s); if(!isalpha(s[0]) && s[0] != '_') { // 非字母或下划线开头则不是标识符 printf("no "); } else { int flag = 1; t = s + 1; while(*t && flag) { // 字母、下划线或数字,则检查下一个字符 if(isalpha(*t)) { t++; continue; } if(*t == '_') { t++; continue; } if(isdigit(*t)) { t++; continue; } // 非字母、下划线或数字则不是标识符 flag = 0; break; } if(flag) printf("yes "); else printf("no "); } } return 0; }