棧可以用來實現表示式的計算 分別用兩個棧來儲存運算符合運算數,預設#變成表示式的結束操作,現在運算子棧中放入乙個#建,以便於後面的匹配,然後遍歷
字串,若是運算子,則與運算子的頭元素進行比較,優先順序高,則運算數拿出兩個,與運算子的頭元素進行運算,隨後入運算數的棧,在這裡沒搞明白為什麼這個】
遍歷到的字串不用入運算子的棧,若是等於,則表示括號匹配,運算子裡面出乙個元素,若是小於,則運算子入棧,總體就是這麼乙個流程
#include#include#include#includeusing namespace std;
stackoptr;//用於寄存運算子
stackopnd;//用於寄存運算元或運算結果,運算結果有可能是浮點數
string exepression;//用於存放表示式
//比較運算子的優先順序
char compare(char a, char b) //返回兩算符a和b的優先順序關係
//用於計算數值,隨後放回棧中
double calculate(double a, double b, char fuhao)
}//在字串中找是不是數字還是運算子
bool isoptr(char c)
//用於計算的過程 核心** 用於求值的過程
double evaluateexpression()
opnd.push(num);
} else
} }//最後放入#已進行匹配,來匹配運算子的結束
optr.push('#');
double res = opnd.top();
opnd.pop();
return res;
}int main()
先貼上自己的**,但有bug,以後再改
然後貼上正確的**
#include #include #include #include using namespace std;
stackopnd; //運算元棧
stackoptr; //算符棧
char expression[100]; //用於盛放表示式
char compare(char a, char b); //返回兩算符a和b的優先順序關係
int calculate(int a, int b, char op); //返回計算結果
int evaluateexpression(); //求值過程
bool isoptr(char c); //是否是算符
int main()
int calculate(int a, int b, char op) //返回計算結果
}bool isoptr(char c)
int evaluateexpression() //求值過程
opnd.push(num);
}else}}
optr.push('#'); //在表示式最左邊增設乙個'#'構成整個表示式的一對'#'
int res=opnd.top();
opnd.pop();
return res;
}
很奇怪的是在vs上面竟然不能執行,但在dev上能執行
用棧實現表示式計算
public class calculator public static inthandle string express else else else else int num integer.parseint keepnum keepnum numstack.push num index if...
用棧實現表示式計算 C
思路 1.首先建立倆個棧,乙個存資料 datastack 另乙個存運算子 operatorstack 2.表示式計算 資料 datasatck,運算子 operatorstack if 當運算子棧為空時 將第乙個運算子放入棧中 else if 此時的運算子的優先順序 棧頂的運算子優先順序 運算子入棧...
用棧計算表示式
首先宣告我們的表示式 expression 只是簡單的四則運算,再加上小括號.運算元operand,操作符operator 如果直接給出字尾表示式 postfix,也叫逆波蘭式 是最容易計算的,這種表示式中已經不含括號.方法 遇到運算元時壓入棧中 遇到操作符時從棧中彈出兩個元素進行此運算,再將運算結...