2015-11-27 72 views
0

我正在研究一個項目,該項目要求我接受以反轉波蘭表示法寫入的字符串並使用堆棧對其進行評估。我應該穿過字符串,如果元素是一個數字,我會繼續瀏覽字符串,直到到達空間,然後使用atoi將字符串的那部分轉換爲整數。然後我將該整數推入堆棧。我的代碼適用於此,但是,我不確定如何繼續下一個數字後面的空格。這是for循環我到目前爲止:C++反向波蘭語表示法堆棧

for (unsigned int i = 0; i < a.size(); i++) 
{ 
    int b; 
    char c[a.size()]; 
    while (isdigit(a[i])) 
    { 
     cout << a[i] << endl; 
     c[i] = a[i]; 
     b = atoi(c); 
     i++; 
    } 
    cout << b << endl; 
    stack.push(b); 
} 

這總是推的第一個整數壓入堆棧,即使有空間經過。我需要添加什麼以繼續將整數推入堆棧之後?謝謝你的幫助。

+0

你能發表所有的代碼? – erip

回答

0

你的問題是在這裏:

c[i] = a[i]; 

當讀取第二個整數,你將使用當前i,並在你的陣列c開始不會寫數字。對atoi(c)的調用將看到第一個不覆蓋並返回該值的整數。

您應該使用第二個索引將數字放入c數組中,並在將整數推入堆棧後重置此第二個索引。

下面是一個例子(未測試):

unsigned j = 0; 
char c[a.size()+1]; 
for (unsigned int i = 0; i < a.size(); i++) 
{ 
    int b; 
    while (isdigit(a[i])) 
    { 
     cout << a[i] << endl; 
     c[j] = a[i]; 
     j++; 
     i++; 
    } 
    c[i] = '\0'; 
    b = atoi(c); 
    cout << b << endl; 
    stack.push(b); 
    j = 0; 
} 

我想這是一些功課,你必須努力工作你的方式。在慣用的C++之一將使用stringstream這項工作。

#include <sstream> 

int b; 
std::stringstream buffer(a); 
while(buffer >> b) { 
    stack.push(b); 
} 
+0

啊,這是有道理的。謝謝你的幫助! – tfreiner