我将一个字符串传递给我的函数,该函数应该使用该字符串将各个字符放入堆栈中。然后堆栈应该吐出来(因为它是堆栈,它应该被反转)。例如,如果我的字符串是hello,它应该打印" olleh"。但相反,我得到了ooooo。我认为这与我每次设置ch等于不同角色的事实有关,但我不确定如何以不同的方式输入这些角色。
void Stack::function2reverse(string myString) {
int countItIt = 0;
int sizeOfString = myString.size();
char Ch ;
for (int i= 0; i< sizeOfString; x++)
{
Ch = myString[x];
stack.push(Ch);
countIt ++;
}
while (countIt != 0)
{
cout << Ch;
stack.pop();
countIt --;
}
}
答案 0 :(得分:7)
cout << Ch;
- 每次都打印相同的字符(最后输入的字符为'o'
)。
而是打印堆栈中的顶部字符:std::cout << stack.top()
。
std::stack
会跟踪自己的size,因此您也不必担心。然后你可以用以下代码替换你的打印循环:
while (!stack.empty()) {
std::cout << stack.top();
stack.pop();
}
当然,标准库无论如何都提供了std::reverse
功能,所以如果这不仅仅是学习std::stack
的练习,你可以使用它(我可以想到其他一些东西)也要做,取决于你想要实现的目标):
std::string s = "hello";
std::reverse(std::begin(s), std::end(s));
// s now contains "olleh"