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 <iostream>
#include <stdio.h>
#include <string.h>
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"<<endl;
//判断2:从第二个字符一直到结尾:如果字符不为下划线,字母,或者数字的话则输出"no"否则输出"yes"
else
{
for(int i = 1;i < 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"<<endl;
else
cout<<"no"<<endl;
}
}
return 0;
}
心得体会:这道题唯一有点反人类的地方就是条件语句的书写,因为条件较长,刚开始有点不敢这样写,但其实把所以判断为标识符的条件写上在前面加个!就可以了,注意各个括号的关系,细心就好了