题目描述
C语言的标识符必须满足以下条件
- 只能由数字,英文字母,下划线组成
- 首字母不能是数字
- 不能是关键字,关键字一共32个为:
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
现在给一个字符串,请判断一下是否为合法的标识符?
输入
第一行是一个整数K(K≤ 10000),表示样例的个数。 以后每行是一个不含空白符的字符串,长度不超过32个字符。
每行输出一个样例的结果,如果是合法的标识符,输出“Yes”,否则输出“No”。(引号不要输出)
样例输入
5 1a a a1 _ if
样例输出
No Yes Yes Yes No
我能想到的就只有这个方法了。
strcmp() 用来比较字符串(区分大小写),字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。
所以如果返回值为零,则两个字符串相同。
#include#include int main() { char str1[35]; char str2[33][11]={"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 n,i,flag,len; scanf("%d",&n); while(n--) { flag = 0; scanf("%s",str1); len = strlen(str1); if(str1[0]>='A'&&str1[0]<='Z'|| str1[0]>='a'&&str1[0]<='z'||str1[0]=='_') { for(i = 1;i < len;i++) { if(str1[i]>='A'&&str1[i]<='Z'|| str1[i]>='a'&&str1[i]<='z'||str1[i]=='_' ||str1[i]>='0'&&str1[i]<='9') flag = 0; else { flag = 1; break; } } if(len < 10&&flag==0) { for(i = 0;i < 33;i++) { if(strcmp(str1,str2[i])==0) flag = 1; } } if(flag) printf("Non"); else printf("Yesn"); } else printf("Non"); memset(str1,'',35); } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)