繁体   English   中英

我的 c++ 后缀转换器使用堆栈库

[英]my c++ postfix converter using stack library

我是 CS 的第二年,我正在尝试通过以下步骤创建中缀到后缀转换器:

1.如果字符是数字打印
2-如果是'(',则将其添加到堆栈中

3-如果是')'然后弹出到output直到它到达'('

4-如果是运算符,则从堆栈中弹出,直到可以根据运算符的优先级将其推入堆栈

5-显示最终的后缀方程

问题是我需要一个循环来扫描所有方程字符但我不知道该怎么做下面是我的 C++ 代码

#include <iostream>
#include <stack>
#include <cstdio>
using namespace std;


void scan(char);
int priority(char);
void st(char);
void move(char);
char expr;
int main() {

    cout << "enter an formula: ";
    cin >> expr;
    scan(expr);


    return 0;
}

void scan(char exp) {

    if (isdigit(exp)) {
        expr = putchar(exp);
        move(exp);

    }
    else {
        st(exp);
        move(exp);

    }

}

void move(char exp) {

    if (expr == exp)
        expr = getchar();

}


int priority(char exp) {

    if (exp == '(')
        return 1;

    else if (exp == ')')
        return 2;

    else if (exp == '%' || exp == '/' || exp == '*')
        return 3;

    else if (exp == '+' || exp == '-')
        return 4;


    return 0;
}

void st(char op) {
    std::stack<char> stack1;

    if (priority(op) == 1) {
        stack1.push(op);
    }

    else if (priority(op) == 2) {
        while (stack1.top() != '(') {
            putchar(stack1.top());
        }
        stack1.top();

    }

    else if (priority(op) == 3) {
        if (stack1.empty()) { stack1.push(op); }

        if (stack1.top() == '%' || stack1.top() == '/' || stack1.top() == '*')
        {
            putchar(stack1.top());
        }

        if (stack1.top() == '+' || stack1.top() == '-') { stack1.push(op); }
    }

    else if (priority(op) == 4) {
        if (stack1.empty()) { stack1.push(op); }

        if (stack1.top() == '%' || stack1.top() == '/' || stack1.top() == '*')
        {
            putchar(stack1.top());
        }

        if (stack1.top() == '+' || stack1.top() == '-') { putchar(stack1.top()); }

    }
}

所以我认为错误就在这里

char expr;

在 C++ 中, char单个字符的类型。 如果您想要一串字符,请使用std::string类型(以及#include <string>

string expr;

然后像这样循环等式

for (char ch : expr)
    scan(ch);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM