专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++

一路ACM题,为什么有这样的结果

发布时间:2011-06-28 10:19:52 文章来源:www.iduyao.cn 采编人员:星星草
一道ACM题,为什么有这样的结果?
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;
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: