1164: 零起点学算法71——C语言合法标识符(存在问题)

1164: 零起点学算法71——C语言合法标识符

Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld
Submitted: 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 }

 

posted @ 2017-04-09 22:51  Dollis  阅读(2059)  评论(0编辑  收藏  举报