使用C ++中的堆栈和向量以相反的顺序打印字符串

时间:2013-03-28 18:32:31

标签: c++ stack

快速提问:我正在尝试接受一个字符串参数,然后使用堆栈和向量将其打印回来。然而,在它说完之后,屏幕上没有任何内容被打印出来!我相信它与矢量设置有关,因为我之前从未使用过它。这是有问题的代码。我将不胜感激任何帮助!

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");


}

4 个答案:

答案 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());`