为什么我的前缀前缀代码不显示输出

时间:2019-08-17 18:15:22

标签: c++

我正在Visual Studio 2019上编写此代码,它将前缀数字转换为中缀。 当我按F5键时,窗口显示:(进程10428)以代码0退出。 要在调试停止时自动关闭控制台,请启用工具->选项->调试->在调试停止时自动关闭控制台。

我对C ++不太了解。我非常了解Java和python,但是我们的老师希望我们使用C ++。

string s[7];
int f = -1;

void push(string a)
{

    s[f++] = a;


}

string pop()
{

    return s[f--];

}

bool isop(char x) {

    switch (x)
    {
    case '+':
    case '-':
    case '*':
    case '/':
        return true;

    }
    return false;
}





int main() {

    string a = "*+ab+cd";
    reverse(a.begin(), a.end());


    for (int i = 0;i<int(a.length());i++) {



        if (isop(a[i])) {

            string v1 = pop();
            string v2 = pop();
            string h = "(" + v1 + a[i] + v2 + ")";

            push(h);



        }
        else {
            push(string(1, a[i]));

        }

    }

    for (int i = 0;i < 7;i++)
    {
        cout << s[i];
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

这里的问题(与Java完全相同)

string s[7];
int f = -1;

void push(string a)
{
    s[f++] = a;
}

第一次按下f-1,因此您具有超出范围的数组访问权限。我猜你是这个意思

void push(string a)
{
    s[++f] = a;
}

您可以通过使用std::vector(类似于Java中的ArrayList)来避免此错误。