У меня есть функция, которая принимает инфиксные выражения и преобразует их в префиксные выражения. Вот мой код:
string infixToPrefix(string expression)
{
stack<char> S; //holds operators
stack<char>output; //display like in class
string prefix = "";
char ch;
S.push('#');
for (int i = expression.length(); i > 0; i--){
ch = expression[i];
if (isOperand(ch) == true){
output.push(ch);
}
else {
if (ch == '('){
while (S.top() != ')'){
output.push(S.top());
S.pop();
}
}
else {
while (isp(S.top()) > icp(ch)){
output.push(S.top());
S.pop();
}
S.push(ch);
}
}
}
while (S.top() != '#'){
output.push(S.top());
S.pop();
}
while (!output.empty()){
if (output.top() == ')'){
output.pop();
}
else{
prefix.append(1,output.top());
output.pop();
}
}
return prefix;
}
Эта функция хорошо работает с примерами выражений, которые мой профессор хочет, чтобы я использовал; «3-4-5» приводит к «-345» и «5 * (4/2)» приводит к «* 5/42». Однако это не работает с выражением «3 ^ 4 ^ 5». Он продолжает давать мне «^^ 345», где он должен быть «^ 3 ^ 45».
Мой алгоритм неверен? Или это может иметь какое-то отношение к ICP и ISP (в коде, который она дала мне, оба имеют «^» = 3)?
Решаемые. Мой профессор закодировал, что isp из ^ = 3 и icp из ^ = 3, тогда как когда я изменил isp на 4, он начал работать. Я возьму это с моим профессором.
Других решений пока нет …