C ++反向波兰表示法堆栈

时间:2015-11-27 19:38:27

标签: c++ arrays string class stack

我正在开发一个项目,该项目要求我接受以反向波兰表示法编写的字符串并使用堆栈进行评估。我应该通过字符串,如果元素是一个数字,我继续通过字符串,直到我到达一个空格,并使用atoi将字符串的该部分转换为整数。然后我将该整数推入堆栈。我的代码是有效的,但是,我不知道如何在空格后继续下一个数字。这是我到目前为止的for循环:

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

这总是将第一个整数推送到堆栈上,即使空格后面有更多整数也是如此。在空格后继续将整数推入堆栈需要添加什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

#ifndef App_Bridging_Header_h
#define App_Bridging_Header_h

#endif /* App_Bridging_Header_h */
#import <BWSip/BWSip.h>
#import "XCPjsua.h"
#import "Reachability.h"
#import "ClearLocalSipManager.h"
#import "testClass.h"

当读取第二个整数时,您将使用当前c[i] = a[i]; 而不是在数组开头i处写入数字。对c的调用将看到第一个未被覆盖的整数并返回该值。

你应该使用第二个索引将数字放在atoi(c)数组中,并在推送堆栈上的整数后重置第二个索引。

这是一个例子(未经测试):

c

我认为这是一些功课,你必须按照自己的方式工作。在惯用的 C ++ 中,人们会使用stringstream来完成这项工作。

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