*HDoj 2024 C语言合法标识符

时间:2020-03-27
本文章向大家介绍*HDoj 2024 C语言合法标识符,主要包括*HDoj 2024 C语言合法标识符使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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
 
Author
lcy
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  2025 2026 2027 2030 2032 
 
 
本道题做到了好久,具体注意点如下:
 
1在每个测试用例中,有的测试用例含有空格,而在scanf和cin中,遇到空格会中断输入,所以本题用gets()来接受每个字符串
2无论是scanf还是gets,在接受一个字符串输入时,按下回车后,终止输入,编译器会自动给字符串的末尾添加一个 '\0'表明字符串的结束,同时按下的回车键仍然存在于键盘缓冲区中,在必要的时候需要用getchar()或者其他方法吸收掉
3注意一开始输入测试用例后按下的回车键仍在键盘缓冲区内,会被 gets() 当成一个字符串,得用getchar()吸收掉
4合法标识符由 字母数字下划线组成,并且必须以字母和下划线开头(这句中的字母既包含了大写字母又包含了小写字母,所以得注意)
 
 
 
C语言代码如下:
#include<stdio.h>
 int main()
 {
     char s[100];
     int n=0;
     int flag;
 //  printf("%d",(int)'\n');        //用于查看回车键的ASIIC码值
     scanf("%d",&n);
     getchar();
     for(int i=0;i<n;i++)
     {
         flag=1;
         gets(s);
            if( !(s[0]=='_' || (s[0]>='a'&&s[0]<='z') || (s[0]>='A'&&s[0]<='Z') ) )
            {
                printf("no\n");
                continue;
            }
            for(int j=1;s[j]!='\0';j++)
            {
                if(!(  s[j]=='_' || (s[j]>='a'&&s[j]<='z')|| (s[j]>='A'&&s[j]<='Z') ||(s[j]>='0'&&s[j]<='9')  ))
                {
                    printf("no\n");
                    flag=0;
                    break;
                }
            }
            if(flag==0)
                continue;
            printf("yes\n");
        }
 }

原文地址:https://www.cnblogs.com/wzmm/p/12580770.html