题源:http://acm.hdu.edu.cn/showproblem.php?pid=2024
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
——————————————————————————————————
思路:看到这题首先想到,什么是c语言合法标识符。首先不能和c语言默认已有的重复,比如if,else等等。其次就是一串字符,必须以下划线_或字母开头,而且整个字符串只能有下划线、数字、字母。
AC代码如下。
#include<stdio.h>
#include<string.h>
int rage(char a)
{
if(!((a>='A'&&a<='Z')||(a>='a'&&a<='z')||a=='_'))
{
if(!(a>='0'&&a<='9')) return 2; //三种都不属于
else return 1; //不能当首
}
}
int main()
{
int n,i,j,flag;
char s[100][51];
while(scanf("%d",&n)!=EOF)
{
getchar();
for(i=0;i<n;i++)
gets(s[i]);
for(i=0;i<n;i++)
{
flag=1; //↓是判断开头的字符是不是_或者字母
//如果不是(不合法)执行if 如果合法 执行for
if(rage(s[i][0])==1)
flag=0;
if(flag)
for(j=0;j<strlen(s[i]);j++)
{
if(rage(s[i][j])==2)
{flag=0;break;}
}
if(flag) printf("yes\n");
if(!flag) printf("no\n");
}
}
return 0;
}