gpxhill
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:1 回覆:0 積分:0 註冊:2003-11-19
發送簡訊給我
|
請問各位大大,怎麼寫一個能先成除後加減的程式呢?(輸入為文字檔test.txt)
ex:2 3*5=17 我只知道要先把,中序->後序,但是我不會做.是否有大大能幫個忙,最好是用C語言 發表人 - gpxhill 於 2003/11/19 20:51:20
|
流
中階會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:36 回覆:142 積分:70 註冊:2003-07-24
發送簡訊給我
|
gpxhill 您好: 首先先去開啟一個文字檔,讀出裡面要運算的資料
ex: 2 18*21-14
當然你要先懂 C 語言檔案指標運用
知道這部份後,就去參考 字串 章節
裡面會提到許多字串運算、拷貝、刪除等等的方法
當你能把任何題目的中序轉為後序
那你應該就能曉得怎麼對轉為後序的字串運算了
atoi(char *s) 是將字串轉為整數的函式 如果在 C ,也許可以考慮用 operator overloading 的方式做 祝順心 ~
|
william
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://www.gravatar.com/avatar/5f266875148cbceca4190890ba363211?s=80) 發表:66 回覆:2535 積分:3048 註冊:2002-07-11
發送簡訊給我
|
引言:
請問各位大大,怎麼寫一個能先成除後加減的程式呢?(輸入為文字檔test.txt)
ex:2 3*5=17 我只知道要先把,中序->後序,但是我不會做.是否有大大能幫個忙,最好是用C語言
發表人 - gpxhill 於 2003/11/19 20:51:20
Homework >
|
ritalin35
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:0 回覆:1 積分:0 註冊:2004-12-24
發送簡訊給我
|
#include
#include
#define N 80 int top=0;
int strack[N];
push(char ch);
char pop();
char preview();
int empty();
int pri(char op);
int in2post (char *in , char *post); main()
{
char in[N],post[N];
int v;
clrscr();
gets(in);
in2post(in,post);
v=eval(post);
printf ("%s\n",post);
printf ("%s = %d\n",in,v);
getch(); }
push(char ch )/*將運算子推入堆疊頂端*/
{
strack[top ]=ch;
}
char pop()/*取出堆疊的第一個運算子*/
{
return(strack[--top]);
}
char preview()/*預視堆疊的頂端運算子*/
{
return(strack[top-1]);
}
int empty()/*判斷堆疊是否為空*/
{
return(top==0);
}
int pri(char ch)
{
switch(ch)
{
case'(':
return(0);
case' ':
case'-':
return(1);
case'*':
case'/':
return(2); }
}
int eval(char *post )
{
int i,l,v,m,n;
char ch;
l=strlen(post);
for (i=0;ipri(op))
push(ch);
else
{
op=pop();
post[pi ]=op;
goto next_op;
}
}
}
}
while (!empty())
{
op=pop();
post[pi ]=op;
}
post[pi]='\0';/*結束*/
}/*end*/
|