2013-10-28 74 views
0

所以我有這個反向波蘭記法程序我不得不爲要求用戶後綴表達式的類做。如何一次將一個字符串推入堆棧中的一個元素?

例如將輸入一個B + C d用戶 - *,末尾的程序將其轉換成

((A + B)*(C - d)),但是這不是我的問題。

所以我的問題是你如何推b + c d - *這是一個整個字符串,一次一個元素到堆棧中。教授還說,當每個元素存儲在字符串中時,輸入之間會有一個空格。

輸出看起來像b + c d - *佔用一個堆棧。

我需要它是一個b + c d - *佔用7個堆棧。

在我正在使用的框架中編寫程序時,有一些基本代碼,如果可能的話想修改它以適合我需要的內容。

#include <iostream> 
#include <string> 

using namespace std; 

typedef string stack_element; 

class stack_node 
{ 
    public: 
    stack_element data; 
    stack_node *next; 
}; 

class stack 
{ 
    public: 
    stack(); 
    ~stack(); 
    stack_element & top(); 
    void pop(); 
    void push(const stack_element &); 
    void print(); 

    private: 
    stack_node *s_top; 
}; 

stack::stack() 
{ 
    s_top=0; 
    cout<<"Inside Default Constructor\n"; 
} 

void stack::push(const stack_element & item) 
{ 
    cout<<"Inside push \n"; 
    stack_node *p = new stack_node; 

    p->data = item; 
    p->next = 0; 

    if (s_top == 0) 
    { 
     s_top = p; 
    } 
    else 
    { 
     p->next = s_top; 
     s_top = p; 
    } 
} 

int main() 
{ 
    string input; 
    cout<<"enter an input:"; 
    cin>>input; 
    S.push(input); 
} 
+2

[拆分字符串](http://stackoverflow.com/q/236129/478288),然後迭代地單獨推送每個元素。 – chrisaycock

+0

這樣做是在 – Ron

+0

我看着124個點擊的例子,有線字符串str(「拆分我的空白」);在裏面。對我來說,最簡單的理解是與其他例子相比,最適合我在做什麼? – Ron

回答

0

這是你在追求什麼?

int main() 
{ 
    string input; 
    cout<<"enter an input:"; 
    while (cin>>input) 
    { 
     S.push(input); 
    } 
} 

說明:

cin >> input讀取空格分隔字符到input。表達式的返回值是cin。在布爾上下文中,如while循環測試,cin被測試以查看上次讀取是否失敗。當輸入被使用時,最後一次讀取失敗,因此循環將終止。

你在課堂上使用了哪些課本?

相關問題