0

快速提问:我正在尝试接受一个字符串参数,然后使用堆栈和向量向后打印它。但是,在屏幕上显示“Here you go!”后,屏幕上没有打印任何内容。我相信这与矢量设置有关,因为我以前从未使用过这个。这是有问题的代码。我将不胜感激任何帮助!

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

4 回答 4

2

您的向量被初始化得太早,当时line仍然是空的。将构造移动到从标准输入中提取字符串的指令putThingsHere 下方:

cin >> line;
vector<char> putThingsHere(line.begin(), line.end());

这是您的固定程序正确运行的实时示例

请注意使用 ofgetline()而不是cin >> line,以便字符之间的空格仍然可以作为单个字符串的一部分读取。

这就是说,值得一提的是,它std::string满足标准序列容器的要求,特别是具有成员函数begin()end()返回一个std::string::iterator.

因此,您根本不需要 a std::vector<>,下面的代码片段就可以完成这项工作:

getline(cin, line);
for(std::string::iterator it = line.begin(); it != line.end(); it++) {
    S.push(*it);
}
于 2013-03-28T18:34:55.057 回答
2

您的line变量最初为空。vector你从来没有真正在PutThingsHere 和stackS中放入任何东西。

放在

cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;

vector<char> PutThingsHere(...)声明之前。

于 2013-03-28T18:35:51.020 回答
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;
于 2013-03-28T18:35:31.460 回答
0

我已经在使用你std::string了,为什么不使用:

`std::string reversed(line.rend(), line.rbegin());`
于 2013-03-28T18:38:01.410 回答