輸入的格式限定有待完善
#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
#define ok 1
#define error 0
typedef int status;
typedef struct snodesnode;
typedef struct linkstacklinkstack;
status creat(linkstack* s)
s->top->next=null;
s->bottom->next=null;
s->length=0;
return ok;
}bool empty(linkstack s)
int size(linkstack s)
status push(linkstack* s,int e)
newx->data=e;
newx->next=s->top->next;
s->top->next=newx;
if(!s->length)
s->bottom=s->bottom->next;
s->length++;
return ok;
}status pop(linkstack* s)
snode* del=s->top->next;
s->top->next=del->next;
free(del);
s->length--;
if(!s->length)
s->bottom=s->top;
return ok;
}int gettop(linkstack s)
return s.top->next->data;
}status show(linkstack s)
snode* p=s.top->next;
while(p)
printf("\n");
return ok;
}status clear(linkstack *s)
status destroy(linkstack* s)
s->top=s->bottom=null;
return ok;
}int type(int c)
/* 運算子優先順序表
0 1 2 3 4 5 6
+ - * / ( ) #
0+ > > < < < > >
1- > > < < < > >
2* > > > > < > >
3/ > > > > < > >
4( < < < < < = 。
5) > > > > 。 > >
6# < < < < < 。 =
*/ int precede(char a,char b);
char pp[7]=;//用於查詢運算子的序號
int hang=0,lie=0;
while(a!=pp[hang])
hang++;
while(b!=pp[lie])
lie++;
return rule[hang][lie];
} int operate(int a,char theta,int b)
}status solve()
if(type(ch))
else
switch(precede(gettop(sign),ch))
push(&num,operate(b,theta,a));
break;
case 2://碰到優先順序高的運算子 高階運算子入棧
push(&sign,ch);
ch=getchar();
break;
}} int res=gettop(num);
pop(&num);
pop(&sign);
if(!empty(num)||!empty(sign))
cout《這裡還有乙個可以實現多位數字的運算的加強版
#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
#define ok 1
#define error 0
typedef int status;
typedef struct snodesnode;
typedef struct linkstacklinkstack;
status creat(linkstack* s)
s->top->next=null;
s->bottom->next=null;
s->length=0;
return ok; }
bool empty(linkstack s)
int size(linkstack s)
status push(linkstack* s,int e)
newx->data=e;
newx->next=s->top->next;
s->top->next=newx;
if(!s->length)
s->bottom=s->bottom->next;
s->length++;
return ok;}
status pop(linkstack* s)
snode* del=s->top->next;
s->top->next=del->next;
free(del);
s->length--;
if(!s->length)
s->bottom=s->top;
return ok;}
int gettop(linkstack s)
return s.top->next->data;}
status show(linkstack s)
snode* p=s.top->next;
while(p)
printf("\n");
return ok;}
status clear(linkstack *s)
status destroy(linkstack* s)
s->top=s->bottom=null;
return ok;}
int type(int c)
/* 運算子優先順序表
0 1 2 3 4 5 6
+ - * / ( ) #
0+ > > < < < > >
1- > > < < < > >
2* > > > > < > >
3/ > > > > < > >
4( < < < < < = 。
5) > > > > 。 > >
6# < < < < < 。 =
*/ int precede(char a,char b);
char pp[7]=;//用於查詢運算子的序號
int hang=0,lie=0;
while(a!=pp[hang])
hang++;
while(b!=pp[lie])
lie++;
return rule[hang][lie];}
int operate(int a,char theta,int b)}
status solve()
if(str[strlen(str)-1]!='#'||str[0]=='#')
for(int i=0;ipush(&num,sum);
} switch(precede(gettop(sign),str[i]))
push(&num,operate(b,theta,a));
i--;
break;
case 2://碰到優先順序高的運算子 高階運算子入棧
push(&sign,str[i]);
break;
} }int res=gettop(num);
pop(&num);
pop(&sign);
// if(!empty(num)||!empty(sign))
cout<<"運算的結果為:"
int main()
return 0;
}
棧實現簡單的計算器
上個星期的作業,現在才改好。基本思路 當我們從鍵盤上輸入一串字元,比如1 2 3 建立兩個棧,乙個存放運算子的棧toperator,乙個存放運算元number,依次遍歷。遇到運算元就依次存放到操作棧裡 遇到運算子時,優先順序高的就直接壓進運算子棧裡,優先順序低的就依次彈出操作棧中的兩個值與運算子進行...
C 實現簡單計算器功能
實現效果 form1.cs using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using...
C 實現簡單計算器功能
c 實現簡單計算器的具體 供大家參考,具體內容如下 要求 輸入乙個包含 的非負整數計算表示式,計算表示式的值,每個字元之間需有乙個空格,若一行輸入為0,則退出程式。輸入樣例 4 2 5 7 11 輸出樣例 13.36 實現 include include using namespace std ch...