【发布时间】:2023-03-07 22:59:01
【问题描述】:
我最近编写了一个程序,它接收输入的 char 数据,测试它是否可接受(a-z,# 标记输入的结尾)并将其放入堆栈中,然后测试它是否是回文。我希望一次输入一个字符,但如果我输入一个以磅结尾的字符串.. 有效。以下是一些相关代码:
char buffer;
bool pound_test = false;
bool palindrome = false;
bool keep_going = true;
stack<char> stack1, stack2, stack3;
string str = "";
cout << "Please enter a string, then end it with the pound sign. " << endl;
while(pound_test == false) {
cin >> buffer;
if((buffer >= 97) && (buffer <= 122))
{
stack1.push(buffer);
stack2.push(buffer);
str += buffer;
}
if((buffer >= 65) && (buffer <= 90)) {
buffer = buffer + 32;
stack1.push(buffer);
stack2.push(buffer);
str += buffer;
}
if(buffer == '#')
pound_test = true;
}
因此,当用户输入一个长字符串(例如“racecar#”)并按下回车键时,程序会正确地将其放入堆栈中。我的问题很简单:为什么?数据是否必须一次输入一个字符才能正常工作,因为 cin 本身就在循环中,并且循环必须重复才能将多个字符输入堆栈,对吗?谢谢!
编辑:感谢大家的回答/cmets!快速而亲切的回复给我留下了深刻的印象。我肯定会再次使用这个网站。
【问题讨论】:
-
这不是 cin 定义的工作方式。它将读取第一个空白。如果您想一次阅读一篇,请使用 cin.get 或 getchar
-
我不明白,这甚至无法编译,
;在stack<char>之后... -
@Blindy:抱歉,这是格式错误:P
-
@frankc:如果操作数是
std::string或char*,它只会读取第一个空格。这不是这里的情况,它只是一个char,它只读取一个字符。该行为的原因不是您所建议的。 -
@clifford 你是对的,我没注意到