统计C语言合法字符

#include <stdio.h>
#include <string.h>
int main()
{
char a[51];
int i,t,n;
while(scanf("%d",&n)!=EOF)
{getchar();
while(n--)
{ t=0;
gets(a);
for(i=0;i<strlen(a);i++)
{
if(a[0]!='_'&&(a[i]<65||a[0]>122||(a[0]>90&&a[0]<97))) {printf("no "); break;}
else if(a[i]<0||(a[i]>9&&a[i]<65)||(a[i]>90&&a[i]<97)||(a[i]>122)&&(a[i]!='_')) {printf("no "); break;}
t++;
}
if(t==strlen(a)) printf("yes ");
}
}
return 0;
}

运行

连续输入ENTER键判断正确,而结果应该要错误,由于不知道如何确定a[i]是否为ENTER键的语句;

所以换了一种思维。

#include <stdio.h>
#include <string.h>
int main()
{
char a[51];
int i,t,n,k;
while(scanf("%d",&n)!=EOF)
{getchar();
while(n--)
{
gets(a);
if(a[0]>'0'&&a[0]<'9')
{
printf("no ");
break;
}
for(i=0;i<strlen(a);i++)
{
if((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||(a[i]=='_'))
{
k=1;
}
else {k=0;break;}
}
if(k==0) printf("no ");
else printf("yes ");
}
}
return 0;
}

总结

1、首字符是字母或下划线
2、其余字符为字母或下划线或数字
3、若用scanf("%s",c);来读取字符数组,会读取不到空格;
4、此数据无需判断main等即可ac
5、
开头除了不能是数字外,还不可以是换行“Enter”
开头和结尾有空格应该没有问题的,但是我在自己的程序上是WA,但在这里是AC。
而且不用考虑main等关键字
原文地址:https://www.cnblogs.com/liuming1115/p/4464318.html