[問題]有關解析一個計算式字串

看板C_and_CPP (C/C++)作者 (囧rz)時間16年前 (2009/08/07 12:02), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/1
這個作業是希望我們能夠解析如下的這個字串 char *str="((0.12 +.734)* abc/(3.78-21*v1)-123/v2^2)* 24.34 -1234"; 將其分解為數字 變數名稱 左右括弧和運算符號(+-*/) 並以數字,字串及字元的格式列印出來 EX: number 0.12 operator + right parenthsis ( 希望印出來大概能像上面的那種格式 這是小弟自己寫的程式 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(void) { char c ; char *expr="str"; char inp[128]; int n; double f; char *str="((0.12 +.734)* abc/(3.78-21*v1)-123/v2^2)* 24.34 -1234"; printf("Analyse string\"%s\"\n",str); while (c= *expr) { if(isalpha(c)) { sscanf(expr,"[a-Z-A-Z 0.9]%n",inp,&n); printf("Variable\t\t\t%s\n",inp); expr+=n; continue; } if (isdigit(c)) { sscanf(expr,"%f%n",&f,&n); printf("Number\t\t\t%f\n",f); expr+=n; continue; } } switch(c) { case ' ': case '\t': case '\v': case '\n': case '\f': break; case '(': printf("left parenthesis\t%c\n",c); break; case ')': printf("right parenthesis\t\t%c\n",c); break; case '+': case '-': case '*': case '/': case '^': printf("operator\t\t%c,n",c); break; } expr++; system("pause"); } 但每次下去跑的時候都會出現錯誤 而且都只是把我要印的那行字串列印出來後devc++會當掉 沒有辦法印出我希望的格式 可以請大家幫我看看是否有哪裡寫錯需要修正嗎 非常感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.169.97.193

08/07 15:01, , 1F
為什麼你要處理的expression放在str裡面
08/07 15:01, 1F

08/07 15:01, , 2F
後面迴圈卻在讀expr?又沒有在哪裡把str複製到expr
08/07 15:01, 2F

08/07 15:53, , 3F
如果改成while(c= *str)就不會當掉了,可是還是無法跑出
08/07 15:53, 3F

08/07 15:54, , 4F
我要的格式,有人可以幫我看看是哪出問題嗎??感謝
08/07 15:54, 4F

08/07 17:57, , 5F
不要,我認為你邏輯上有很大問題
08/07 17:57, 5F

08/07 17:58, , 6F
除非你好好解釋為什麼一開始要讀expr,我非常在意
08/07 17:58, 6F

08/07 18:14, , 7F
不好意思 一開始是我對用法還不太清楚才會讀成expr
08/07 18:14, 7F
文章代碼(AID): #1AUwTWjK (C_and_CPP)
文章代碼(AID): #1AUwTWjK (C_and_CPP)