您的位置:首页 > 编程语言 > C语言/C++

hdu 2024 C语言合法标识符

2010-09-01 12:37 399 查看

C语言合法标识符

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10155 Accepted Submission(s): 4235


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
#include <iostream>
#include <cmath>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <ctype.h>
#include <string>
using namespace std;

vector<string> keyword;
//这个是对关键字的定义,很多人丢失了
void PreProcess()
{
keyword.push_back("auto");
keyword.push_back("break");
keyword.push_back("case");
keyword.push_back("char");
keyword.push_back("const");
keyword.push_back("continue");
keyword.push_back("default");
keyword.push_back("do");
keyword.push_back("double");
keyword.push_back("else");
keyword.push_back("enum");
keyword.push_back("extern");
keyword.push_back("float");
keyword.push_back("for");
keyword.push_back("goto");
keyword.push_back("if");
keyword.push_back("int");
keyword.push_back("long");
keyword.push_back("struct");
keyword.push_back("register");
keyword.push_back("return");
keyword.push_back("signed");
keyword.push_back("short");
keyword.push_back("sizeof");
keyword.push_back("static");
keyword.push_back("switch");
keyword.push_back("typedef");
keyword.push_back("union");
keyword.push_back("unsigned");
keyword.push_back("void");
keyword.push_back("volatile");
keyword.push_back("while");
}

inline bool Process(string temp)
{
if(!isalpha(temp[0]) && temp[0]!='_')
return false;
for(int i = 1;i < (int)temp.size();i++)
if(!isalpha(temp[i])&&!isalnum(temp[i])&&temp[i]!='_')
return false;
for(int j = 0;j < (int)keyword.size();j++)
if(temp == keyword[j])
return false;
/*if(temp.size() > 32)//我觉得在这里应该加上,但是加上后就会WA
return false;*/
return true;

}
int main()
{
PreProcess();
int n;
char buff[56];
memset(buff,0,sizeof(buff));
while(cin>>n)
{
getchar();
int num = 0;
while(true && n != 0)//为了防止敲击仅仅敲击回车后的空输入
{
gets(buff);
string temp(buff);
if(temp != "")
{
num++;
if(Process(temp))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
if(num == n)
break;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: