2016-09-28 25 views
-3

У меня есть функция, которая принимает выражения 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.)?

+2

Возможно, что-то связано с полномочиями, оценивающими право налево, а остальные оценивают слева направо. Но я не смотрел, что делает ваш код, чтобы понять это; Я также не использовал префиксные операционные обозначения. –

+1

Образец кода, который вы дали, является неполным. Нет определения для 'isp' или' isOperand', который определенно скрывает понимание вашей программы. Кроме того, имейте в виду отступы и общую читаемость; помните, что вы просите людей помочь вам в свое время. –

+0

Что такое ISP и ICP, и где эти функции? – EJP

ответ

-2

РЕШЕННЫЙ. Мой профессор закодировал, что isp of = 3 и icp of = 3, тогда как когда я изменил isp на 4, он начал работать. Я возьму это с моим профессором.

 Смежные вопросы

  • Нет связанных вопросов^_^