闲来无事,看到了字符串反转这道题目,想着使用栈的方式解决问题,就上手,第一版代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
char c;
stack<char> sta;
while(cin >> c){ // 就是这里,无限循环下去
sta.push(c);
}
int len = sta.size();
for (int i = 0; i < len; i++) {
cout << sta.top();
sta.pop();
}
return 0;
}
我就想偷懒,先输入成字符串,但是这样就出现多占用一次内存,浪费资源,部分代码如下:
string s;
cin >> s;
stack<char> sta;
for (char c : s) {
sta.push(c);
}
显然是逃避问题。
在某个阿根廷大哥的帮助下,解决问题如下:
int main() {
char c;
stack<char> sta;
while ((c = cin.get()) != '\n') {
sta.push(c);
}
int len = sta.size();
for (int i = 0; i < len; i++) {
cout << sta.top();
sta.pop();
}
return 0;
}
原因是 cin
会丢弃回车,cin.get()
是保留回车在输入流队列中,可以通过添加限制 ,这样就不会无限输入下去。