【求助】C語言,字串→運算 - PCZONE 討論區

返回   PCZONE 討論區 > ▲ -- 電 腦 軟 體 討 論 區 > -- HELP ME 電 腦 軟 硬 體 急 救 版


PCZONE 討論區



通知

-- HELP ME 電 腦 軟 硬 體 急 救 版 若您有簡單的電腦軟硬體或網路等各種疑難雜症想要請教高手,請在此發表。此區不分種類的問題皆可發表,以小問題為主,請電腦新手多多利用此一新的版版。

會員
【求助】C語言,字串→運算
小弟是剛學C語言的人
最近小弟遇到一個問題
如果知道使用者輸入的是一個運算式(字串)
而且知道裡面也一定只有數字、+-*/、()
而且一定算得出結果
那要如何才能算出結果

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

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

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

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

請高手指教

回覆
會員

數學四則運算喔
要先知道中序式,後序式之類的
一般而言我們用的是前者,電腦用的是後者
所以要先轉換,然後才能算
寫出來有點多....
翻翻關於演算法的書吧,都會有寫
回覆
尋夢園

能不能舉個例子呢
光聽你的描述很難理解你所想要表達的
回覆
拉登長官

引用:
最初由 Hell 發表
能不能舉個例子呢
光聽你的描述很難理解你所想要表達的
char *str = "1 + 2 * ( 3 + 4 )";

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

這種東西用 Lex/Yacc 寫是最快的..
回覆
會員

我有個想法
可以用isdigit先判斷
用atoi轉成數字
數字前後沒有碰到*/或()的先運算
然後再作有碰到的

只是想法而已 coding還是自己來吧
回覆
還沒想到新的

消音
回覆
會員

先去研究一下 stack 跟 queue 吧,同時了解一下後序式的算法。
回覆
會員

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

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

回覆
會員

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

簡單來說
中序式 3 + 5
前序式 + 3 5
後序式 3 5 +
前序式 後序式都不須有括號存在而且不須注運算順序,所以在電腦中運算比中序式方便.
謝謝大大的回文
今天爬文的時候,也有發現這一篇文章
可是因為程度的關係....
只能勉強看得懂

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

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

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

引用:
最初由 dou0228 發表
char *str = "1 + 2 * ( 3 + 4 )";

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

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

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

回覆







 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。