1164: 零起点学算法71——C语言合法标识符
Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 1080 Accepted: 484[][][]Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
312ajffi8x_aff ai_2
Sample Output
noyesno
HINT
请注意编译器的差异,可以使用TEST功能获得帮助。
Source
1 #include2 #include 3 int main(){ 4 int n; 5 char a[50]; 6 scanf("%d%*c",&n); 7 while(n--){ 8 int d=1; 9 gets(a);10 if(a[0]!='_'&& !isalpha(a[0])){11 printf("no\n");12 }13 else{14 for(int j=1;a[j]!='\0';j++){15 if(a[j]!='_'&&!isalnum(a[j])){16 17 printf("no\n");18 break;19 }20 else{21 printf("yes\n");22 break; 23 }24 } 25 } 26 }27 return 0;28 }
//按理来说,跳出第一层循环后不会输出yes 为什么会有这种情况
AC代码:
1 #include2 #include 3 int main(){ 4 int n; 5 char a[50]; 6 while(scanf("%d%*c",&n)!=EOF){ 7 while(n--){ 8 int d=1; 9 gets(a);10 if(a[0]!='_'&& !isalpha(a[0])){11 printf("no\n");12 }13 else{14 for(int j=1;a[j]!='\0';j++){15 if(a[j]!='_'&&!isalnum(a[j])){16 17 d=0;18 break;19 }20 }21 puts(d ? "yes" : "no"); 22 } 23 }24 }25 return 0;26 }