侧边栏

HDU-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
 
思路:很简单的题,C语言合法标识符定义为仅由字母,数字,下划线构成,且首字符必须为字母或下划线。读取一个字符串后用循环对每一个字符进行判断,若每一个字符都合法,则标志变量为0.
 
备注:1.输入问题。一开始想用cin直接输入字符串,但是测试数据是有空格的,cin无法读取空格。后来改用cin.getline(),但是它的操作对象是字符数组。最后才找到getline()函数。
2.判断问题。一开始是想用ASCII码进行判断,但是写出来的程序略显冗余,想着写一个判断函数,但是代码量还是没有得到简化,最后想起来<cctype>/<ctypr.h>头文件里有函数可以直接用。
 1 #include<iostream>
 2 #include<cctype>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     cin >> n;
 8     getchar();
 9     while (n--)
10     {
11         string a;
12         getline(cin,a);
13         if (isalpha(a[0])||a[0]=='_')//isalpha(a)判断a是否为字母,若是则返回0;
14         {
15             int flag = 1;
16             for (int i = 1; i < a.size(); i++)
17             {
18                 if (isalnum(a[i])|| a[i] == '_') flag=0;//isalnum(a)判断a是不是字母或数字,若是则返回0;
19                 else { flag++; break; };
20             }
21             if (flag) cout << "no";
22             else cout << "yes";
23         }
24         else cout << "no";
25         cout << endl;
26     }
27     return 0;
28 }
函数名称 返回值
isalnum() 如果参数是字母数字,即字母或数字,该函数返回true
isalpha() 如果参数是字母,该函数返回真
isblank() 如果参数是空格或水平制表符,该函数返回true
iscntrl() 如果参数是控制字符,该函数返回true
isdigit() 如果参数是数字(0~9),该函数返回true
isgraph() 如果参数是除空格之外的打印字符,该函数返回true
islower() 如果参数是小写字母,该函数返回true
isprint() 如果参数是打印字符(包括空格),该函数返回true
ispunct() 如果参数是标点符号,该函数返回true
isspace()

如果参数是标准空白字符,如空格、进纸、换行符、回车

、水平制表符或者垂直制表符,该函数返回true

isupper() 如果参数是大写字母,该函数返回true
isxdigit() 如果参数是十六进制的数字,即0~9、a~f、A~F,该函数返回true
tolower() 如果参数是大写字符,则返回其小写,否则返回该参数
toupper() 如果参数是小写字母,则返回其大写,否则返回该参数

以上列出了<cctype>函数及用法,转自https://www.cnblogs.com/zy691357966/p/5480456.html

另:本题未考虑C语言合法标识符不应含有关键字,否则更加麻烦。

posted @ 2018-12-02 01:00  晴人  阅读(1779)  评论(0编辑  收藏  举报