C语言合法标识符
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 83097 Accepted Submission(s): 32044 Problem Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
312ajffi8x_aff ai_2
Sample Output
noyesno
Author
lcy
解题思路:用字符数组存储字符串,然后通过条件语句对每个字符进行判断
注意事项:输入完n之后,必须写上getchar()语句消除回车键对后续输入的影响,然后用gets()函数读入每一个字符,strlen()函数取得字符串的长度,(不包括结束字符).
getchar():C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于getc 带有 stdin 作为参数。
gets():C 库函数 char *gets(char *str) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
源代码如下:
#include#include #include using namespace std;char a[50];int main(){ int n,flag; cin>>n; getchar(); //将回车键读入防止影响 while(n--) { flag = 0; gets(a); int p = strlen(a); //判断1:如果第一个字符不为下划线,字母开头则输出"no"; if(!(a[0] == '_'||(a[0] >= 'a'&&a[0] <= 'z')||(a[0] >= 'A'&&a[0] <= 'Z'))) cout<<"no"< < p;i++) { if(!(a[i]== '_'||(a[i] >= 'a'&&a[i] <= 'z')||(a[i] >= 'A'&&a[i] <= 'Z')||(a[i] >= '0'&&a[i] <= '9'))) { flag = 1; break; } } if(flag == 0) cout<<"yes"<
心得体会:这道题唯一有点反人类的地方就是条件语句的书写,因为条件较长,刚开始有点不敢这样写,但其实把所以判断为标识符的条件写上在前面加个!就可以了,注意各个括号的关系,细心就好了