1234 Legal Identifier

Legal Identifier

1、题目内容

Description
题目描述
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

2、题目分析

这个题目主要就是考察了我们对字符串的比较。我们根据合法标识符的定义,先判断首字母是否满足非数字的要求,再去判断字符串是否由字母、数字、下划线组成,最后,使用字符串比较函数判断字符串是否与关键字相同。

3、参考代码

#include<stdio.h>
#include<string.h>
int main()
{
	int k;
	scanf("%d",&k);
	while(k--)
	{
		int flag=1;                  // 用来作为标记,1表示合法,0表示不合法 
		char str[34];
		scanf(" %s",str);
		if(str[0]>='0'&&str[0]<='9') //判断首字母是否非数字 
		{
			flag=0;
		}
		else
		{
            int m=strlen(str);
			int i;
			for(i=0;i<m;i++) //字符串是否均由字母、数字、下划线组成 
			{
				if(!((str[i]>='0'&&str[i]<='9')||(str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')||str[i]=='_'))
				{
				   flag=0;
				   break;	
				}			
			}
			if(flag==1) //当满足前两个条件时,判断是否满足最后那个条件--与关键字不可以相同 
			{
				if(strcmp(str,"auto")==0||strcmp(str,"break")==0||strcmp(str,"case")==0||strcmp(str,"char")==0||strcmp(str,"const")==0||strcmp(str,"continue")==0||strcmp(str,"default")==0)
				{
					flag=0;				
				}
				else if(strcmp(str,"do")==0||strcmp(str,"double")==0||strcmp(str,"else")==0||strcmp(str,"enum")==0||strcmp(str,"extern")==0)
				{
					flag=0;				
				}
				else if(strcmp(str,"float")==0||strcmp(str,"for")==0||strcmp(str,"goto")==0||strcmp(str,"if")==0||strcmp(str,"int")==0)
				{
					flag=0;				
				}
				else if(strcmp(str,"long")==0||strcmp(str,"register")==0||strcmp(str,"return")==0||strcmp(str,"short")==0||strcmp(str,"signed")==0)
				{
					flag=0;
				}
				else if(strcmp(str,"sizeof")==0||strcmp(str,"static")==0||strcmp(str,"struct")==0||strcmp(str,"switch")==0||strcmp(str,"typedef")==0)
				{
					flag=0;		
				}
				else if(strcmp(str,"union")==0||strcmp(str,"unsigned")==0||strcmp(str,"void")==0||strcmp(str,"volatile")==0||strcmp(str,"while")==0)
				{
					flag=0;	
				}
			}			
		}
		if(flag) //根据标记输出结果 
		{
			printf("Yes\n");
		}
		else
		{
			printf("No\n");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42987451/article/details/83098314
今日推荐