1 問題描述
輸入為四則運算表示式如(2+3)*(5+7)+9/3,僅由
+ - * / ( )
構成,沒有空格,要求其值。
2 問題分析
有兩種方法,一是用遞迴,將表示式分解為項和因子,再通過遞迴逐塊解決。其中,我們需要清楚的是,表示式為項的加減,項為因子的乘除,因子為數值或帶括號的表示式。
第二種方法是通過堆疊,先將表示式轉化成字尾表示式,利用棧依次求解。
3 完整**
① 方法一:
#include#include#includeusing namespace std;
int expression_value();//表示式的值
int factor_value();//因子的值
int term_value();//項的值
int expression_value()
else
more = false;
} return result;
}int factor_value()
else }
return result;
}int term_value()
else
break;
} return result;
}int main()
② 方法二:
#include#include#include#include#includeusing namespace std;
stackst;//用來儲存操作符
//先寫乙個運算子優先順序比較的函式,按返回值,3最高,1最低
int priority(char a)
return -1;
}vectors;
//這是乙個將中綴表示式轉化為字尾表示式的函式
void change(string str)
st.pop();
}else
st.push(str[i]);
}else
while(priority(st.top()) >= priority(str[i] ) )
char b;
b = st.top();
st.pop();
s.push_back(b);
if(st.size() == 0)
} } i++;
} while(!st.empty()) }
int main()
else
temp.pop();
temp.push(result);
} }cout << endl << "運算結果為:" << result << endl;
return 0;
}
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...
表示式求值
寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...