XTU,C语言,Legal Identifier

XTU,C语言,Legal Identifier,第1张

XTU,C语言,Legal Identifier

题目描述

C语言的标识符必须满足以下条件

  1. 只能由数字,英文字母,下划线组成
  2. 首字母不能是数字
  3. 不能是关键字,关键字一共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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5578847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存