Поиск постфиксной формы инфиксных выражений в текстовом файле - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь найти постфиксную форму инфиксных выражений. Моя программа должна прочитать и рассчитать его в заданном текстовом файле. Программа читает файл и показывает мне инфиксные формы, но не вычисляет постфиксную форму инфиксных выражений. Я не могу понять, где проблема. Я имею в виду, я не знаю, проблема в функции main () или в функции convertToPostfix. Что я должен сделать, чтобы решить эту проблему?

основная функция:

int main() {

    infixToPostfix<string> exp;
    string getcontent;

    ifstream infile;

    infile.open("infixData.txt");
    if (infile.is_open()) {
        while (!infile.eof()) {
            exp.showInfix();
            infile >> getcontent;
            cout << getcontent << endl;
            exp.convertToPostfix();
            exp.getPfx();
            exp.showPostfix();


        }

    }
    return 0;
}

И функция convertToPostfix ():

template <class Type>
void infixToPostfix<Type>::convertToPostfix() {


stackType<string> obj;
stackType<char> x;
    int i = 0, j=0;
    while (infx[i] != '\0')
    {
        if ((infx[i] >= 'a' && infx[i] <= 'z') || (infx[i] >= 'A' && infx[i] <= 'Z')) {
            pfx[j] += infx[i];
        }
        else if (infx[i] == '('){
            obj.push("(");
    }
        else if (infx[i] == ')') {
            while (obj.top() != "(")
            {
                pfx += obj.top();
                obj.pop();
            }
            if (obj.top() == "(")
                obj.pop();
        }
        else{
            while (precedence(x.top(), infx[i]))
            {
                pfx += obj.top();
                obj.pop();
                j++;
            }
            obj.push(infx);

        }
        i++;
    }
    cout << pfx << endl;
}

мой файл "infixData.txt":

A+B-C;
(A+B)*C;
(A+B)*(C-D);
A+((B+C)*(E-F)-G)/(H-I);
A+B*(C+D)-E/F*G+H;
2+4-1;
(6+3)*2;

showInfix ():

template <class Type>
void infixToPostfix<Type>::showInfix()
{
    cout << endl;
    cout << "Infix expression: " << infx;

}

1 Ответ

0 голосов
/ 23 апреля 2020

Так что, похоже, это проблема организации кода. Вы просто не используете переменные в своей программе так, чтобы это могло сработать. Вы читаете файл в одну переменную, но используете совершенно другую переменную, чтобы попытаться решить проблему.

Это то, что вам нужно сделать, прочитать выражение инфикса в переменную main, затем вы передать эту переменную в качестве параметра в функцию, которая вычисляет выражение постфикса. Вот так

        infile >> getcontent;
        cout << getcontent << endl;
        convertToPostfix(getcontext);

Тогда convertToPostfix должна быть функцией, которая выглядит следующим образом

void convertToPostfix(const std::string& infx) {
    ...
}

Нет необходимости иметь класс с именем infixToPostfix, просто пишите функции для выполнения работа, а не классы.

И вам действительно нужно прочитать о том, как писать функции, как передавать параметры в функции и возвращать значения из функций. Это очень базовый навык c. На данный момент вы явно не понимаете этого, но это абсолютно необходимо.

Ваш код также включает в себя множество расширенных функций, таких как классы и шаблоны, которые не нужны для этой задачи и в любом случае не должны не будет использоваться, если вы еще не освоили основы.

Я предполагаю, что вы скопировали функцию convertToPostfix откуда-то. Вы должны знать, что это не совсем решает проблему, которую вам дали. Формат строк, которые он обрабатывает, немного отличается от формата строк, которые у вас есть. Интересно, видите ли вы разницу?

...