1164: 零起点学算法71——C语言合法标识符(存在问题)
1164: 零起点学算法71——C语言合法标识符
Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 1080 Accepted: 484
[Submit][Status][Web Board]
Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input 
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
HINT
请注意编译器的差异,可以使用TEST功能获得帮助。
Source
1 #include<stdio.h> 2 #include<ctype.h> 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 #include<stdio.h> 2 #include<ctype.h> 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 }