Description
输入一个字符串,判断其是否是C++的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。输入保证不为C++的关键字(保留字)。
Output
对于每组输入数据,输出一行。如果输入数据是C++的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
这是我的代码;
#include
#include
using namespace std;
int main()
{
char a[49],f[1];
int e;
cin >> e;
for (int j = 1; j <= e; j++)
{
cin.ignore();
cin.getline(a, 50); int b = 0, c, d;
c = strlen(a);
d = c - 1;
if ((a[0] >= 65 && a[0] <= 90) || (a[0] == 95) || (a[0] >= 97 && a[0] <= 122))
{
for (int i = 1; i <= c-1; i++)
{
if ((a[i]57 && a[i]90 && a[i]122))
{
cout << "no" << endl; break;
}
else b++;
}
if (b == d)cout << "yes" << endl;
}
else cout << "no" << endl;
}
return 0;
}
为什么到第二次执行时就从第二个字符开始判断,第三次执行时又从第三个字符开始判断?
------解决思路----------------------
LZ贴出的代码中以下3行不完整:
#include
#include
if ((a[i]57 && a[i]90 && a[i]122))
“第二次执行时就从第二个字符开始判断”的原因是第一个字符被cin.ignore()忽略了。
如下修改可AC:
#include <iostream>
using namespace std;
int main()
{
char a[49],f[1];
int e;
cin >> e;
cin.ignore();//加
for (int j = 1; j <= e; j++)
{
//删 cin.ignore();
cin.getline(a, 50); int b = 0, c, d;
c = strlen(a);
d = c - 1;
if ((a[0] >= 65 && a[0] <= 90)
------解决思路----------------------
(a[0] == 95)
------解决思路----------------------
(a[0] >= 97 && a[0] <= 122))
{
for (int i = 1; i <= c-1; i++)
{
if (!((a[i]>='A'&&a[i]<='Z')
------解决思路----------------------
(a[i]>='a'&&a[i]<='z')
------解决思路----------------------
(a[i]>='0'&&a[i]<='9')
------解决思路----------------------
a[i]=='_')) //改 if ((a[i]57 && a[i]90 && a[i]122))
{
cout << "no" << endl; break;
}
else b++;
}
if (b == d)cout << "yes" << endl;
}
else cout << "no" << endl;
}
return 0;
}