写的很麻烦,毕竟算是刚开始学,希望以后能写的又快又好。括号功能没加,数字位数大于1位的恐怕要加个函数转换了。
编译环境:vc++6.0
// demo1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
栈 实现 加减乘除运算
*/
typedef struct openStack{
int *top;
int *base;
//栈的大小
int stackSize;
}open;
typedef struct oprtStack{
char *top;
char *base;
int stackSize;
}oprt;
//初始化栈
void initStack(oprt * oprt1);
void initStack(open * open1);
//获得栈的顶端元素
int getTop(open * open1);
int getTop(oprt * oprt1);
//进栈
void push(open *open1,int e);
void push (oprt *oprt1,char e);
//顶端出栈
int pop(open *open1);
char pop(oprt *oprt1);
//查看栈
void visit(oprt * oprt1);
void visit (open * open1);
int isExist(open *open1);
int isExist(oprt *oprt1);
//比较优先级与计算
int precede(char x,char y);
int operate(int a,char b,int c);
int main(int argc, char* argv[])
{
char *str = (char *)malloc(100);
char x='\0';
int y = 0;
int i = 0;
int a,b,c;
oprt * oprt1 = (oprt *)malloc(sizeof(oprt));
//初始化两个栈
oprt1->stackSize=-1;
open * open1=(open *)malloc(sizeof(open));
open1 ->stackSize =-1;
printf("输入一段字符串:\n");
//获取运算符
gets(str);
//printf("%s",str);
//初始化
initStack(oprt1);
initStack (open1);
//写入栈并运算
while(*(str+i)!='#')
{
char flag = *(