伊莉討論區
標題:
利用堆疊(stack)求四則運算
[打印本頁]
作者:
eyic6421965
時間:
2013-11-8 06:39 PM
標題:
利用堆疊(stack)求四則運算
輸入說明(INPUT):
第一行是小朋友輸入的數學式子。(數學式子長度 <32768)
數學符號包含 : 數值 +,-,*,/,(,),[,],{,}
括號最多為三層,由內而外為(), [] ,{}
輸出說明(OUTPUT):
若數學式子正確,輸出 "AC"(正確答案);反之, 數學式子錯誤,輸出 "WA"(錯誤答案)
(請輸出執行時間及記憶體空配置 )
輸入範例:
{ [ 2 1 * ( 2 / 3 ) ] - 3 3 }
{ [ 3 3 * ( 2 - 3 ) ] * ( 3 + 3 }
輸出範例:
AC
WA
Time : 0.002 seconds
Memory Usage :2789376 bytes
跪求各路神手相助~~~~~
作者:
dh3014
時間:
2013-11-8 09:01 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
chevylin0802
時間:
2013-11-9 12:09 PM
你在講的題目
是巢狀分析
小括號是一組
中括號是一組
大括號是一組
如不考慮數字的部份
只需要對+-*/以及( ) [ ] { }做檢查
所以你只需要設計好規則
例如 + - * / 這四個運算符號不可以連續
"(" 之後只能出現 ")"
"[" 之後雖然允許 "(" ")" 卻需要使用 "]" 作結束
所以這稱之為解析器
運算式解析器
一般常見的做法
直觀的做就夠了
for迴圈裏使用
switch(str[i]) {
case '+' :
case '-' :
case '*' :
case '/' :
i++;
if(str[i] > '0' && str[i] < '9' ) continue;
break;
case '(' :
case ')' :
case '[' :
case ']' :
case '{' :
case '}' :
checkout(str[i]);
break;
}
只有checkout需要對堆疊裏的括號做檢查
歡迎光臨 伊莉討論區 (http://a401.file-static.com/)
Powered by Discuz!