C C 含括號的四則運算(棧方式實現)

2021-10-02 18:53:40 字數 2186 閱讀 8271

使用棧來實現含括號的四則運算,複雜的就是各種分支的判斷,當時參考了很多前輩的**,又自己敲了很久,得到乙個最終版,在此記錄一下,希望若干年後的自己看到時能夠不忘初心。

#include#include/*資料棧*/

struct shuju ;

/*符號棧*/

struct fuhao ;

void initoperatenum(struct shuju *stacknum)

void initoperatesymbol(struct fuhao *stacksymbol)

/*存入資料棧*/

void inshuju(struct shuju *stacknum, int num)

/*存入符號棧*/

void infuhao(struct fuhao *stacksymbol, char ch)

/*讀取資料棧*/

int readshuju(struct shuju *stacknum)

/*讀取符號棧*/

char readfuhao(struct fuhao *stacksymbol)

/*從資料棧取出資料*/

int putshuju(struct shuju *stacknum)

/*從符號棧取出符號*/

char putfuhao(struct fuhao *stacksymbol)

/*符號優先順序判斷*/

int judge(char ch)

if(ch == '+' || ch == '-')

else if(ch == '*' || ch == '/')

else if(ch == ')')

}/*四則運算*/

int math(float v1, float v2, char c)

case '-' :

case '*' :

case '/' :

}return sum;

}void manu()

int main()

; char *str = (char *)malloc(sizeof(char)*200);

while((c = getchar()) != '\n')

str[i] = '\0';

for(i = 0; str[i] != '\0'; i ++)

else if(str[i] == '(' && str[i+1] == '-')

inshuju(&data, atoi(v));

while(t > 0)

if(str[i] != ')')

}else if(str[i] >= '0' && str[i] <= '9')

inshuju(&data, atoi(v));

while(t > 0)

i --;

}else

else if(judge(str[i]) == 1)

else if(judge(str[i]) == 2)

else if(judge(readfuhao(&symbol)) == 2)

infuhao(&symbol, str[i]); //新符號進棧

}else if(judge(readfuhao(&symbol)) == 3)

infuhao(&symbol, str[i]); //新符號進棧

}/*棧頂符號不可能是')',故不做判斷*/

}else if(judge(str[i]) == 3)

else if(judge(readfuhao(&symbol)) == 2)

else if(judge(readfuhao(&symbol)) == 3)

infuhao(&symbol, str[i]); //新符號進棧}}

else if(judge(str[i]) == 4) while(judge(readfuhao(&symbol)) != 1);

putfuhao(&symbol); //括號內運算結束後使'('出棧

} }}

free(str); //釋放記憶體空間

while(symbol.top != -1)

printf("%.2f\n", data.data[0]);

}return 0;

}

含括號的四則運算

總體思路 需要用到棧,從中綴表示式到字尾表示式,再把字尾表示式轉化為結果,比如計算9 3 1 5 4 2,這個式子就叫做中綴表示式,然後我們需要把它轉化成字尾表答式,方法 將中綴表示式從左到右讀取,如果是數字,直接輸出到字尾表示式,如果是字元,則如果是右括號,把從棧頂開始到棧中左括號的字元輸出到字尾...

四則運算(含括號)C

輸入乙個表示式 用字串表示 求這個表示式的值。保證字串中的有效字元包括 0 9 且表示式一定合法。資料範圍 表示式計算結果和過程中滿足 val le 1000 val 1000,字串長度滿足 1 le n le 1000 1 n 1000 輸入乙個算術表示式 得到計算結果 輸入 3 2 輸出 25 ...

C C 帶括號四則運算

1 首先從string讀入表示式,取出每乙個字元後裝入deque容器coll1中 原始碼在後面 2 從該容器取出每乙個元素,利用棧將中綴表示式轉換成字尾表示式 可參考 將字尾表示式裝入容器coll3中。3 最後從coll3中取出元素逐一處理,既使用逆波蘭式求值 如下圖 c 原始碼 可編譯並正常執行,...