Problem Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];
int T;
scanf("%d",&T);
getchar();//起初没写这句话,一输入3就输出no,原来是因为在输出3之后 ,程序把回车当成了一个字符串,并输出了结果。 注意,scanf不吸收回车,gets会吸收回车!
while(T--)
{
memset(a,'\0',sizeof(a));
int flag=1;
//scanf("%s",a);用scanf输入字符串时,遇到空格就结束,后面的字符不算,所以这种情况下,第三个样例总是yes
gets(a);
int len;
len=strlen(a);
int i;
if((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||a[0]=='_')
{
for(i=0;i<len;i++)
{
if(a[i]==' '&&a[i+1]!=' ')
{
flag=0;
break;
}
else
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||a[i]=='_'||(a[i]>='0'&&a[i]<='9'))
continue;
else
flag=0;
}
}
if(flag)
printf("yes\n");
else
printf("no\n");
}
else
printf("no\n");
}
return 0;
}