如何将字符串放入char堆栈并将其打印出来? C ++

时间:2016-03-04 16:34:25

标签: c++

我将一个字符串传递给我的函数,该函数应该使用该字符串将各个字符放入堆栈中。然后堆栈应该吐出来(因为它是堆栈,它应该被反转)。例如,如果我的字符串是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 --;
    }
}

1 个答案:

答案 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"

您可能还想阅读why using namespace std; is a bad practice.