Почему я столкнулся с этой проблемой - Ошибка при запуске программы (ошибка сегментации) при создании программы для преобразования инфикса в префикс?
Я пытаюсь создать программу на C ++, которая преобразует инфикс в префикс, но когда я запускаю ее, она показывает мне эту ошибку «Ошибка запуска программы (ошибка сегментации)» . Ниже мой код. Логика идеальна, но когда я пытаюсь запустить ее с тестовым примером как ((a + bc) * d ^ e ^ f) / g, он показывает пустой результат.
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int precedence(char c)
{
if (c == '^')
{
return 3;
}
else if ((c == '*' || c == '/'))
{
return 2;
}
else if ((c == '+' || c == '-'))
{
return 1;
}
return -1;
}
bool isOperator(char c)
{
if (c == '*' || c == '/' || c == '+' || c == '-' || c == '^')
{
return true;
}
return false;
}
string InfixToPrefix(stack<char> s, string infix)
{
string prefix;
reverse(infix.begin(), infix.end());
for (int i = 0; i < infix.length(); i++)
{
if (infix[i] == '(')
{
infix[i] = ')';
}
else if (infix[i] == ')')
{
infix[i] = '(';
}
}
for (int i = 0; i < infix.length(); i++)
{
if ((infix[i] >= 'a' && infix[i] <= 'z') || (infix[i] >= 'A' && infix[i] <= 'Z'))
{
prefix += infix[i];
}
else if (infix[i] == '(')
{
s.push(infix[i]);
}
else if (infix[i] == ')')
{
while (((s.top() != '(') && (!s.empty())))
{
prefix += s.top();
s.pop();
}
if (s.top() == '(')
{
s.pop();
}
}
else if (isOperator(infix[i]))
{
if (s.empty())
{
s.push(infix[i]);
}
else
{
if (precedence(infix[i]) > precedence(s.top()))
{
s.push(infix[i]);
}
else if (((precedence(infix[i]) == precedence(s.top())) && (infix[i] == '^')))
{
while (((precedence(infix[i]) == precedence(s.top())) && (infix[i] == '^')))
{
prefix += s.top();
s.pop();
}
s.push(infix[i]);
}
else if (precedence(infix[i]) == precedence(s.top()))
{
s.push(infix[i]);
}
else if (precedence(infix[i]) < precedence(s.top()))
{
while ((precedence(infix[i]) < precedence(s.top())) && (!s.empty()))
{
prefix += s.top();
s.pop();
}
s.push(infix[i]);
}
}
}
if (!s.empty())
{
prefix += s.top();
s.pop();
}
}
reverse(prefix.begin(), prefix.end());
return prefix;
}
int main()
{
string infix, prefix;
stack<char> s;
cin >> infix;
prefix = InfixToPrefix(s, infix);
cout << endl
<< prefix << endl;
return 0;
}