計算類似帶括號的式子的值 1+2*(3+4)
先將式子轉換成字尾或者字首表示式,在進行求值,從網上學習了乙個**,但只能輸入比10小的
數進行計算。
**:
/*
stack模板
入棧:s.push(x);
出棧:s.pop();
訪問棧頂:s.top();
判斷棧空: s.empty(); 棧空返回true
棧中元素個數: s.size(); */
#include#include#include#include#include#includeusing namespace std;
stacks; //宣告乙個棧
char *hz(char * exp) //求字尾表示式
else if (exp[i] == '(') //檢測到左括號,入棧
else if (exp[i] == ')') //檢測到右括號,把與左括號中間的運算子出棧並刪除這對左右括號
else //不是左括號,則是運算子,將其出棧,放入字尾表示式中
} }
else if (exp[i] == '+' || exp[i] == '-')//如果檢測到+-就將棧中優先順序比+-高或等於的運算子出棧,放入字尾表示式中
else
break; //這樣就是遇到括號了。不出棧
}s.push(exp[i]);//當前的運算子進棧
}else if (exp[i] == '*' || exp[i] == '/') //乘除原理和加減相同
else
break;
}s.push(exp[i]); //當前的運算子進棧
}i++;
} while (s.empty() == false)//將棧中剩下的運算子依次送入字尾表示式
tempstr[j]=0;
// cout<='0' && ss[i]<='9')
else if (ss[i]=='+')
else if (ss[i]=='-')
else if (ss[i]=='*')
else if (ss[i]=='/')
i++;
} return s.top();
} int main()
表示式求值
程式的說明見清華大學出版社 資料結構 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 ...