快速提问:我正在尝试接受一个字符串参数,然后使用堆栈和向量将其打印回来。然而,在它说完之后,屏幕上没有任何内容被打印出来!我相信它与矢量设置有关,因为我之前从未使用过它。这是有问题的代码。我将不胜感激任何帮助!
void main() {
stack<char> S;
string line;
vector<char> putThingsHere(line.begin(), line.end());
vector<char>::iterator it;
cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;
for(it = putThingsHere.begin(); it != putThingsHere.end(); it++){
S.push(*it);
}
cout << "Here you go! " << endl;
while(!S.empty()) {
cout << S.top();
S.pop();
}
system("pause");
}
答案 0 :(得分:2)
当line
仍为空时,您的矢量过早初始化。移动putThingsHere
的构造从标准输入中提取字符串的指令:
cin >> line;
vector<char> putThingsHere(line.begin(), line.end());
以下是正确运行的固定程序的live example。
请注意使用getline()
代替cin >> line
,以便您的字符之间的空格仍可作为单个字符串的一部分进行读取。
这就是说,值得一提的是std::string
满足标准序列容器的要求,特别是成员函数begin()
和end()
返回std::string::iterator
。
因此,您根本不需要std::vector<>
,下面的代码段就可以完成这项工作:
getline(cin, line);
for(std::string::iterator it = line.begin(); it != line.end(); it++) {
S.push(*it);
}
答案 1 :(得分:2)
您的line
变量最初为空。你永远不会在vector
PutThingsHere和stack
S中放置任何内容。
点击
cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;
在vector<char> PutThingsHere(...)
陈述之前。
答案 2 :(得分:0)
首先阅读line
,然后才阅读putThingsTHere
stack<char> S;
string line;
cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;
vector<char> putThingsHere(line.begin(), line.end());
vector<char>::iterator it;
答案 3 :(得分:0)
我已经使用std::string
,为什么不使用:
`std::string reversed(line.rend(), line.rbegin());`