C语言合法标识符
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
C++编写:
由于先前自认为是对的,结果提交了很多次都是Wrong Answer,就感觉这个题可能要考虑关键字,就去网上搞了个别人没有考虑关键字的代码进去测试然而过了,然后又费力写了半天,其中还出了些让人头皮发麻的问题,终于搞出来了,代码如下:
/*合法标识符:
所有标识符必须由字母或下划线开头
标识符不能是关键字(此处不考虑)
*/
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin>>n;
cin.ignore(); //这个必须写,就是这玩意儿让人头皮发麻
while(n--)
{
string a;
getline(cin,a);
int i;
if(!(a[0]=='_' || (a[0]>='a' && a[0]<='z') || (a[0]>='A' && a[0] <= 'Z')))
{
cout<<"no"<<endl;
}
else
{
for(i=1;i<a.size();i++)
{
if(!(a[i]=='_' || (a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i] <= 'Z')||(a[i]>='0'&& a[i]<='9')))
{
cout<<"no"<<endl;
break;
}
}
if(i == a.size())
cout<<"yes"<<endl;
}
}
}
当然代码注释出来了那一行,一直觉得自己真的没错了,就是Wrong Answer,真是能把人搞死。幸亏在网上看到了关于这样一个解说,加上去就直接Accept了。别人写的这篇文章也是关于这个题的,考虑了标识符是关键字的情况,大家可以了解一下,网址如下:
杭电acm 2024 C语言合法标识符
个人觉得当然当时去找来测试该题是否需要考虑关键字的情况的那个解题方法也很好,是调用库函数来完成的,也很有必要了解一下,此处就不窃取人家的代码发到自己的文章上了,提供一下他的网站:
HDU-2024 C语言合法标识符