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语言合法标识符不应含有关键字,否则更加麻烦。
————————————————
心里有光,哪儿都美
心里有光,哪儿都美