C++ 中綴表示式求值遞迴版本
阿新 • • 發佈:2018-12-12
這個演算法比較難想,是把表示式expression看成用+號或-分開
term看成用*號或/號分開
factor看成括號或一個數,形成遞迴
#include<iostream> #include<cstring> #include<cstdlib> using namespace std; int factor_value(); // 求一個因子的值 int term_value(); // 求一個項的值 int expression_value(); // 求一個表示式的值 int main() { cout << expression_value() << endl; return 0; } int expression_value() //求一個表示式的值 { int result = term_value(); // 求第一項的值 bool more = true; while (more) { char op = cin.peek(); // 看一個字元,不取走 if (op == '+' || op == '-') { cin.get(); // 從輸入流取走字元 int value = term_value(); if (op == '+') result += value; else result -= value; } else more = false; } return result; } int term_value() // 求一個項的值 { int result = factor_value(); // 求一個因子的值 while (true) { char op = cin.peek(); if (op == '*' || op == '/') { cin.get(); // 從輸入流取走字元 int value = factor_value(); if (op == '*') result *= value; else result /= value; } else break; } return result; } int factor_value() // 求一個因子的值 { int result = 0; char c = cin.peek(); if (c == '(') { cin.get(); // 去左括號 result = expression_value(); // 求表示式的值 cin.get(); // 去右括號 } else { // 如果讀到是一個整數,注意這裡不是隻有一位 while (isdigit(c)) { result = 10 * result + c - '0'; cin.get(); c = cin.peek(); } } return result; }