表示式求值

2021-07-26 10:08:33 字數 1164 閱讀 8233

計算類似帶括號的式子的值  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 ...