2016-03-04 46 views
3

我傳遞一個字符串到我的函數,該函數應該使用該字符串將個別字符放入堆棧。然後堆棧應該吐出來(因爲它是一個堆棧,它應該顛倒過來)。例如,如果我的字符串是hello,它應該打印「olleh」。但相反,我越來越ooooo。我認爲這與我每次設置等同於不同角色的事實有關,但我不知道如何以不同方式輸入這些角色。如何把一個字符串放在char堆棧中並打印出來? C++

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 --; 
    } 
} 

回答

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.

+0

讀了哦,有我!謝謝!!哦,我不知道。我會更詳細地瞭解這一點。謝謝! – rose

相關問題