HDU-2024

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;
}
心得体会:这道题唯一有点反人类的地方就是条件语句的书写,因为条件较长,刚开始有点不敢这样写,但其实把所以判断为标识符的条件写上在前面加个!就可以了,注意各个括号的关系,细心就好了

posted @ 2018-01-28 19:13  Western_Trail  阅读(213)  评论(0编辑  收藏  举报