中綴表示式

2022-02-02 18:22:35 字數 3199 閱讀 8353

**實現

//直接計算中綴表示式

//不含括號

#include#include#includeusing namespace std;

//運算符號優先順序比較

//加減為低階運算,乘除是高階運算;先算乘除

//return 1 means can calculate, else can not.

int getpriority( stackoperators )

return 0;

}//輸入操作符棧 和 運算元棧 進行計算

void calculate(stack&operands, stack&operators)

//cout << op1 << operation << op2 << "=" << res << endl; //test

operands.push(res);

}int main()

operands.push( stod(number) );

number.clear();

//讀完最後乙個數字

if ( c == formula.end() )

break;

}} //calculate, 先算乘除

if( operation.find(*c) != string::npos )

operators.push((*c));

} }//處理剩餘的加減

while( !operators.empty() )

else

} else }

cout << formula << " = " << operands.top() << endl;

return 0;

}

//直接計算中綴表示式

//含括號

#include#include#includeusing namespace std;

//運算符號優先順序比較

//return 1 means can calculator, else can not.

int getpriority( dequeoperators )

return 0;

}double calculate( double op1, double op2, char operation )

//cout << op1 << operation << op2 << "=" << res << endl; //test

return res;

}void calculator(deque&operands, deque&operators)

else

res = calculate( op1, op2, operation );

operands.push_back(res);

}int main()

operands.push_back( stod(number) );

number.clear();

//讀完最後乙個數字

if ( c == formula.end() )

break;

}} //處理 + - * /

if( operation.find(*c) != string::npos )

operators.push_back((*c));

} //處理括號

else

//遇到)」時,算出()內算式的值

else

//此時括號內已經沒有乘除

dequetmp_oprands;

dequetmp_operators;

//把()內的算式pop到新的棧

while( operators.back() != '(' )

tmp_oprands.push_back(operands.back());

operands.pop_back();

operators.pop_back(); //彈出「(」

while(!tmp_operators.empty())

operands.push_back( tmp_oprands.back() ); //push結果

tmp_oprands.pop_back();}}

} //處理剩餘的加減

double op1, op2, res;

char operation;

while( !operators.empty() )

cout << formula << " = " << operands.back() << endl;

return 0;

}

前面的演算法將加減與乘除分開處理,導致後面運算加減的時候還要考慮減法的運算順序問題,變得麻煩了。

下面是改進後的**

#include#include#includeusing namespace std;

//return the answer of op1 operation op2

double calculate( double op1, double op2, char operation )

cout << op1 << operation << op2 << " = " << res << endl; //test

return res;

}int getpriority( char operation )

void calculator( stack&operands, stack&operators )

//(1+2)*33-8/2-9

int main()

c--; //退一步

operands.push( stod(num) );

//cout << operands.top() << endl; //test

} //運算

else if( operators.find(*c) != string::npos )

operators.push(*c);

}} //括號處理

else

operators.pop();

}} }

while( !operators.empty() )

cout << formula << " = " << operands.top() << endl;

return 0;

}

中綴表示式

輸入乙個中綴表示式 由 0 9組成的運算數 加 減 乘 除 四種運算子 左右小括號組成。注意 也可作為負數的標誌,表示式以 作為結束符 判斷表示式是否合法,如果不合法,請輸出 no 否則請把表示式轉換成字尾形式,再求出字尾表示式的值並輸出。注意 必須用棧操作,不能直接輸出表示式的值。輸入格式 第一行...

中綴表示式 字尾表示式

中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...

中綴表示式 字尾表示式

數學表示式稱為中綴表示式,符合人的思考習慣 1 2 3運算子放在數字後面,符合計算機運算 123 遍歷中綴表示式中的數字和符號 左括號 入棧 運算符號 需要與棧頂符號進行優先順序比較 遍歷結束 將棧中所有符號彈出並輸出。例 中綴表示式 1 2 5 3 4 2 1 1 數字1直接輸出 結果 1 棧 空...