2015-11-27 65 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