Вот пример программы преобразования инфикса в постфикс на C++:
#include <iostream>
#include <stack>
#include <string>
// Function to check if a character is an operator
bool isOperator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
// Function to get the precedence of an operator
int getPrecedence(char op) {
if (op == '+' || op == '-')
return 1;
else if (op == '*' || op == '/')
return 2;
return 0;
}
// Function to convert infix expression to postfix
std::string infixToPostfix(const std::string& infix) {
std::string postfix;
std::stack<char> stack;
for (char c : infix) {
if (isalnum(c)) {
postfix += c;
} else if (c == '(') {
stack.push(c);
} else if (c == ')') {
while (!stack.empty() && stack.top() != '(') {
postfix += stack.top();
stack.pop();
}
if (!stack.empty() && stack.top() == '(') {
stack.pop();
}
} else if (isOperator(c)) {
while (!stack.empty() && getPrecedence(c) <= getPrecedence(stack.top())) {
postfix += stack.top();
stack.pop();
}
stack.push(c);
}
}
while (!stack.empty()) {
postfix += stack.top();
stack.pop();
}
return postfix;
}
int main() {
std::string infixExpression;
std::cout << "Enter an infix expression: ";
std::cin >> infixExpression;
std::string postfixExpression = infixToPostfix(infixExpression);
std::cout << "Postfix expression: " << postfixExpression << std::endl;
return 0;
}
Эта программа преобразует инфиксное выражение в постфиксное выражение с использованием алгоритма сортировочной станции. Он поддерживает операторы «+», «-», «*» и «/». Программа принимает инфиксное выражение в качестве входных данных и выводит соответствующее постфиксное выражение.
Методы, используемые в этой программе:
isOperator(char c): проверяет, является ли символ оператором.getPrecedence(char op): получает приоритет оператора.infixToPostfix(const std::string& infix): преобразует инфиксное выражение в постфиксное.main(): основная функция, которая взаимодействует с пользователем, принимает входные данные и отображает выходные данные.
Обратите внимание, что программа предполагает допустимые входные выражения и не обрабатывает ошибки или недопустимые выражения.