У меня есть функция, которая принимает выражения infix и преобразует их в префиксные выражения. Вот мой код:Работа с префиксом Infix, но не для выражения функции power (cart)?
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' или' isOperand', который определенно скрывает понимание вашей программы. Кроме того, имейте в виду отступы и общую читаемость; помните, что вы просите людей помочь вам в свое время. –
Что такое ISP и ICP, и где эти функции? – EJP