杭电acm 2024 C语言合法标识符
做本题前:(1).了解合法标识符(包括32个关键字不能做标识符)
(2).cin.ignore()用这个是因为getline(cin,s)这个函数……咋说能,就像反应慢半拍一样,读取不对齐。
#include<iostream>
//#include<fstream>
#include<string>
using namespace std;
int main()
{
//ifstream cin("2024_input.txt");
string keyword[32]={"auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum",
"extern", "float", "for", "goto", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while"};
int t;
cin>>t;
string s;
cin.ignore();
while(t--)
{
int i,flag=1;
getline(cin,s);
if(!(s.at(0)=='_'||(s.at(0)>='a'&&s.at(0)<='z')||(s.at(0)>='A'&&s.at(0)<='Z'))) cout<<"no"<<endl;
else
{
for(i=1;i<s.size();++i)
{
if(!(s.at(i)=='_'||(s.at(i)>='0'&&s.at(i)<='9')||(s.at(i)>='a'&&s.at(i)<='z')||(s.at(i)
>='A'&&s.at(i)<='Z')))
{ cout<<"no"<<endl; flag=0; break; } }
for(i=0;i<32;++i)
{ if(s==keyword[i])
{ flag=0; cout<<"no"<<endl; } }
if(flag==1)
cout<<"yes"<<endl; } }
return 0;
}
总结:这个题,我这个很水的人都觉着很水,仔细认真就行了。。。