判断是否合法标识符 acm的一道题

来源:百度知道 编辑:UC知道 时间:2024/05/26 12:48:21
题目是 输入一个字符串,判断其是否是C的合法标识符。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。

我按以下做法做出来 其他结果都正确 只是不能判断带有空格的字符串
把cin改为getline之后所有的结果全乱套了 哪位高手帮忙看看 是什么问题
有没有办法不改用char 就用string完成这道题的
题目原址http://acm.hdu.edu.cn/showproblem.php?pid=2024

#include <iostream>
#include <string>
using namespace std;

void main()
{
string sys[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", "

这样的 cin的结束是空字符 空格 回车都是
getline只是回车

你再做一下试一试 不行再帮你

还是不行??

你这个题有很多问题,你的代码 致命错误就有2处
逐位检查的循环没有个退出条件,J无限大;
前面的cin getline 没有缓冲区刷新(getline不会主动刷新) 就是说前面那个3 一直都存在缓冲区中,第一次输入无论如何都是no

第3,你的程序根本无法实现题目所给的input output操作
正确的流应该是先根据输入的n 创建N个string 然后再分别对这些string 进行辨认,而你想把他写成一体。
在这里并不能简化程序,并且 你发现没有,你的流,是输入一个cin 就输出一个cout, 根本无法实现输入完毕后一起输出

程序我已经给你改好了,改动有点大,但是还是希望你自己先改一改

这道题思路很简单:C语言的 标识符只有三种组成,且数字不能打头,所以详细我就不用 说了,关键是你用cin只能读一部分,他只能读到空格、回车、制表符这三者之一就停止了,什么意思呢?就是说假如有这样的一个测试数据:
1
abcd abcd
对于“abcd abcd”因为中间有一个空格,所以不符合标识符的定义,应该输出no,而你的会输出两个yes,因为你的程序是把“abcd abcd”当作两部分来读的,所以输出两次,如果判你Wrong Answer还好说,要是判你Output limite Excuse你也没什么好说的。

说句题外话,你如果是大一刚来的问这样的问题可以原谅,如果不是的话,你自己应该考虑了是不是该从事acm