簡單的單位數四則計算(帶括號)

2021-08-26 12:38:23 字數 2427 閱讀 8622

#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...