#ifndef aaa
#define aaa
#include#include#include#define number 20
typedef int datatype;
typedef struct stack
stack;
typedef struct stackdata
stackdata;
void stackinit(stack *ret);
void calculator(char *cur, stackdata *ret);
void infix(char *str, char (*cur)[number]);
#endif //aaa
#include"count.h"
//棧的初始化
void stackinit(stackdata *ret)
//入棧
void stackpush(stackdata *ret, datatype d)
//棧頂的資料
datatype stacktopcell(stackdata *computer)
--computer->top;
return computer->array[computer->top];
}//計算過程
//如果是數字的話直接入棧
//如果是操作符的話,取兩次棧頂的元素,第一次取出的元素放在操作符的右邊,第二次取出的元素放在操作符的左邊,然後將計算的結果壓入棧
//計算完成之後,取出棧頂的元素,此時棧頂的元素就是計算式的結果
void calculator(char *cur, stackdata *ret)
else
; break;
case '-':
;break;
case '*':
;break;
case '/':
;break;
}} i++; }}
//判斷符號的先後順序
datatype symbolorder(char cur)
return i;
} 中綴變字尾
//取棧頂的元素
datatype topstack(stack *cur)
//出棧
void popstack(stack *cur)
//入棧
void pushstack(stack *ret, char d)
//判空
datatype emptystack(stack cur)
//中綴變字尾
//遇到字元數字的話,放入存放字尾表示式的陣列中
//遇到左括號時,直接壓入棧中
//遇到右括號時,開始出棧,直到棧頂元素為左括號時結束,且把左括號出棧
//遇到其他操作符時,檢視棧此時是否為空,為空的話,直接入棧,不為空的話,與棧頂操作符比較,如果比棧頂操作符的優先順序
//高的話,直接入棧,如果比棧頂的操作符低的話,棧頂元素開始出棧,出棧的元素放入存放字尾操作符的陣列中,直到棧頂元素的優先順序小於等於當前操作符時,停止出棧,
//將當前操作符入棧。如此反覆,直到存放中綴表示式的陣列內沒有元素為止。然後將棧內剩餘的操作符出棧,出棧的元素放入存放字尾表示式的陣列內。
void infix(char *str, char (*cur)[number])
; datatype i = 0;
datatype j = 0;
while(str[i])
else if(str[i] == '(')
else if(str[i] == ')')
popstack(&arr);
} //當前符號的優先順序大於棧頂元素的話,直接入棧
else if(symbolorder(str[i]) > symbolorder(arr.array[arr.top-1]) || emptystack(arr))
//當前符號的優先順序小於棧頂元素時,棧頂元素出棧,直到當前元素的優先順序大於棧頂的優先順序時停止
else if(symbolorder(str[i]) <= symbolorder(arr.array[arr.top-1]))
pushstack(&arr, str[i]);
} i++;
} //將棧中剩餘的符號儲存入陣列
while(!emptystack(arr))
}
#include"count.h"
void text()
; infix(str, &cur);
calculator(cur, &ret);
printf("計算後的結果是%d\n", ret.array[ret.top-1]);
}int main()
帶括號的四則運算
帶括號的四則運算 public class caculatordemo 帶括號的四則運算 param exp return public static double calckuohao string exp else 不帶括號的四則運算 param exp return public static...
C C 帶括號四則運算
1 首先從string讀入表示式,取出每乙個字元後裝入deque容器coll1中 原始碼在後面 2 從該容器取出每乙個元素,利用棧將中綴表示式轉換成字尾表示式 可參考 將字尾表示式裝入容器coll3中。3 最後從coll3中取出元素逐一處理,既使用逆波蘭式求值 如下圖 c 原始碼 可編譯並正常執行,...
C 實現四則運算器 帶括號
基本分析可以看另一篇文章c 實現四則運算器 無括號 棧的實現 ifndef stack h define stack h includeclass stack int stack int unsigned int capacity bottom new int capacity 1 top bott...