现在的位置: 首页 > 综合 > 正文

HDU 2024 C语言合法标识符

2018年04月29日 ⁄ 综合 ⁄ 共 1966字 ⁄ 字号 评论关闭
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
 

  

 解题思路:

          水题虽然是水题,但是如果能从题目中吸收到知识,那么这道题就不是水题了QAQ。。。

          先来复习下,什么是C语言的合法标识符呢?就是由字母,数字,和下划线所构成的一个字符串就是C语言的一个合法标识符了,但是这个字符串是有规定的

也就是说,它的开头必须只能是字母和下划线而不能是数字,所以对于这道题来说,只要用if-else作为一个大的框架就好了,首先,我们应该这样做,对s[0]进行一

个判断,如果s[0]是数字的话,QAQ,直接输出no就行了,如果s[0]不是数字的话,那么我们进入else,在else中,我们只吸收字母,数字和下划线,将他们的和做

统计,如果等于的是字符串的长度,那么OK!输出yes,否则输出no了~

比较gets(str);跟scanf("%s",str);的区别。

scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。

gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。

char string[15]; gets(string); /*遇到回车认为输入结束*/

scanf("%s",string); /*遇到空格认为输入结束*/

所以在输入的字符串中包含空格时,应该使用gets输入。

scanf和gets获取字符串时的区别

在C语言中,能构获取字符串的函数至少有两个:

1.scanf()

所在头文件:stdio.h

语法:scanf("格式控制字符串",变量地址列表);

接受字符串时:scanf("%s",字符数组名或指针);

2.gets()

所在头文件:stdio.h

语法:gets(字符数组名或指针);

两者在接受字符串时:

1.不同点:

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等;

2.相同点:

字符串接受结束后自动加'\0'。

例1:

#include <stdio.h>

main()

{

char ch1[10],ch2[10];

scanf("%s",ch1);

gets(ch2);

}

依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asd fg\0"。

例2:

#include <stdio.h>

main()

{

char ch1[10],ch2[10],c1,c2;

scanf("%s",ch1);

c1=getchar();

gets(ch2);

c2=getchar();

}

依次键入asdfg回车,asdfg回车,则ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需输入。

scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。

gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中

gets()用到读取字符串,用回车结束输入 

scanf()可以读取所有类型的变量

代码:

# include<cstdio>
# include<iostream>
# include<cstring>


using namespace std;

# define MAX 60

char s[MAX];


int main(void)
{
    int t;cin>>t;
    getchar();
    while ( t-- )
    {
        gets(s);
        int ans = 0;
        int len = strlen(s);
        if ( s[0] >= '0'&&s[0] <= '9' )
            cout<<"no"<<endl;
        else
        {
            for ( int i = 0;i < len;i++ )
                {
                    if ( s[i]<='9'&&s[i]>='0'||s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'||s[i]=='_' )
                        ans++;
                }
                 if ( ans == len )
                    cout<<"yes"<<endl;
                else
                    cout<<"no"<<endl;

        }
        //cout<<ans<<endl;
        //cout<<len<<endl;





    }

    return 0;
}

 



抱歉!评论已关闭.