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

第 1 頁,共 2 頁 1 2 末頁末頁
顯示結果從第 1 筆 到 10 筆,共計 12 筆
  1. #1
    會員
    註冊日期
    2001-08-10
    討論區文章
    16

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

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

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

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

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

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

    請高手指教



  2. #2
    會員 darkwarrior 的大頭照
    註冊日期
    2001-10-11
    所在地區
    ADSL
    討論區文章
    242
    數學四則運算喔
    要先知道中序式,後序式之類的
    一般而言我們用的是前者,電腦用的是後者
    所以要先轉換,然後才能算
    寫出來有點多....
    翻翻關於演算法的書吧,都會有寫

  3. #3
    尋夢園 Hell 的大頭照
    註冊日期
    2002-02-05
    討論區文章
    183
    能不能舉個例子呢
    光聽你的描述很難理解你所想要表達的

  4. #4
    拉登長官 dou0228 的大頭照
    註冊日期
    2002-08-26
    所在地區
    2M/256K
    討論區文章
    1,073
    最初由 Hell 發表
    能不能舉個例子呢
    光聽你的描述很難理解你所想要表達的
    char *str = "1 + 2 * ( 3 + 4 )";

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

    這種東西用 Lex/Yacc 寫是最快的..
    O/S: XPro SP2;Gentoo 05-r1;F-BSD 5.4/N-BSD 2.0.2
    替代役第一梯次, 矯正役笨蛋
    Bug !?
    Red Hat 技術支援的改變引起眾怒_原文出處
    echo $(echo 4jp022f@n5549i5o9or | tr 0-9a-z 0-3d-l6-9m-w4-5) | tr i .
    就讓 LP 去耍, 我們好在旁邊笑
    QoS 沒中文資料!?

  5. #5
    會員
    註冊日期
    2002-07-02
    討論區文章
    48
    我有個想法
    可以用isdigit先判斷
    用atoi轉成數字
    數字前後沒有碰到*/或()的先運算
    然後再作有碰到的

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



  6. #6
    還沒想到新的 海盜天使 的大頭照
    註冊日期
    2002-03-24
    討論區文章
    1,490
    消音

  7. #7
    會員 怪盜基德 的大頭照
    註冊日期
    2000-11-25
    所在地區
    ADSL 12M/1M
    討論區文章
    2,070
    先去研究一下 stack 跟 queue 吧,同時了解一下後序式的算法。

  8. #8
    會員 alec5106 的大頭照
    註冊日期
    2001-06-07
    討論區文章
    1,464
    這樣的問題,如果要自己來寫除了要懂字串的判斷.
    最重要是一定要把原來的中序運算式轉成後序運算式,
    之前的版上有人討論過相關問題
    http://www.pczone.com.tw/showthread.php?t=104158

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

  9. #9
    會員
    註冊日期
    2001-08-10
    討論區文章
    16
    最初由 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))
    一樣直覺又快速的方法
    不過看來
    好像是真的沒有

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

  10. #10
    會員
    註冊日期
    2001-08-10
    討論區文章
    16
    最初由 dou0228 發表
    char *str = "1 + 2 * ( 3 + 4 )";

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

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

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



類似的主題

  1. 【求助】C語言問題
    作者:魔鬼大帝 所在討論版:-- HELP ME 電 腦 軟 硬 體 急 救 版
    回覆: 7
    最後發表: 2005-06-05, 03:06 PM
  2. 【求助】XP語言列不見了????
    作者:mingcheng 所在討論版:-- Windows 討 論 版
    回覆: 9
    最後發表: 2005-01-12, 09:15 PM
  3. 【求助] c語言讀檔
    作者:金田一 所在討論版:-- 其 他 軟 體 討 論 版
    回覆: 4
    最後發表: 2003-08-19, 12:39 PM

 

此網頁沒有從搜尋引擎而來的訪客

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •