【求助】C語言,字串→運算



贊助商連結


頁 : [1] 2

a4562
2003-12-27, 02:32 PM
小弟是剛學C語言的人
最近小弟遇到一個問題
如果知道使用者輸入的是一個運算式(字串)
而且知道裡面也一定只有數字、+-*/、()
而且一定算得出結果
那要如何才能算出結果

就好像
printf("%d",運算式);
這樣

不過小弟當然知道是不可能啦

目前想到的方法是把最裡面的括號分離出來
然後把分離出來的算式按分成要最先算的兩個
然後算出那兩個之後把它取代回去
就這樣一直做到只剩一個數

因為小弟知道這個方法很笨,而且也很難....
不知道是否有更簡單的方法?

請高手指教

贊助商連結


darkwarrior
2003-12-27, 03:05 PM
數學四則運算喔
要先知道中序式,後序式之類的
一般而言我們用的是前者,電腦用的是後者
所以要先轉換,然後才能算
寫出來有點多....
翻翻關於演算法的書吧,都會有寫

Hell
2003-12-27, 03:59 PM
能不能舉個例子呢
光聽你的描述很難理解你所想要表達的

dou0228
2003-12-27, 04:16 PM
最初由 Hell 發表
能不能舉個例子呢
光聽你的描述很難理解你所想要表達的

char *str = "1 + 2 * ( 3 + 4 )";

printf( "Result = %d", ??? );

這種東西用 Lex/Yacc 寫是最快的..:)

nervous
2003-12-28, 09:52 PM
我有個想法
可以用isdigit先判斷
用atoi轉成數字
數字前後沒有碰到*/或()的先運算
然後再作有碰到的

只是想法而已 coding還是自己來吧

海盜天使
2003-12-28, 10:15 PM
消音

怪盜基德
2003-12-28, 10:34 PM
先去研究一下 stack 跟 queue 吧,同時了解一下後序式的算法。

alec5106
2003-12-28, 10:53 PM
這樣的問題,如果要自己來寫除了要懂字串的判斷.
最重要是一定要把原來的中序運算式轉成後序運算式,
之前的版上有人討論過相關問題
http://www.pczone.com.tw/showthread.php?t=104158

簡單來說
中序式 3 + 5
前序式 + 3 5
後序式 3 5 +
前序式 後序式都不須有括號存在而且不須注運算順序,所以在電腦中運算比中序式方便.

a4562
2003-12-29, 02:50 AM
最初由 alec5106 發表
這樣的問題,如果要自己來寫除了要懂字串的判斷.
最重要是一定要把原來的中序運算式轉成後序運算式,
之前的版上有人討論過相關問題
http://www.pczone.com.tw/showthread.php?t=104158

簡單來說
中序式 3 + 5
前序式 + 3 5
後序式 3 5 +
前序式 後序式都不須有括號存在而且不須注運算順序,所以在電腦中運算比中序式方便.

謝謝大大的回文
今天爬文的時候,也有發現這一篇文章
可是因為程度的關係....
只能勉強看得懂

目前是覺得
光是判斷從中序變成前or後序就很困難了
而直接用人類的邏去計算的話
方法又太過繁雜
不知道要怎麼下手

所以想看看有沒有比較快的方法可以像直接做出來的方法
就好像之前大大所說的
字串"5+6*8-16+(-6)"
要算出結果
可以直接變成像printf("%d",5+6*8-16+(-6))
一樣直覺又快速的方法
不過看來
好像是真的沒有

不過還是感謝各位大大的回應^^
小弟會努力的搞懂那個結構的^^||||←好難呀^^|||

a4562
2003-12-29, 03:06 AM
最初由 dou0228 發表
char *str = "1 + 2 * ( 3 + 4 )";

printf( "Result = %d", ??? );

這種東西用 Lex/Yacc 寫是最快的..:)

對不起,這位大大
小弟不知道什麼是Lex/Yacc
也不知道怎麼用
稍稍查了一下
好像是一個編譯器還是一個工具?

不過還是謝謝大大提供一個好用的方法
小弟有空的時候會去研究一番
當然也希望大大不吝指教,謝謝^^