首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

模拟堆栈 实现简单的加减乘除 差错望大家指出多谢

2013-04-20 
模拟堆栈 实现简单的加减乘除 差错望大家指出谢谢#includeiostream#includestring.hint result(int le

模拟堆栈 实现简单的加减乘除 差错望大家指出谢谢
#include<iostream>
#include<string.h>
int result(int len,char * str)
{
    int result=0;
    char * fuhao=new char [len];
    int * shuzi=new int [len];
    memset (fuhao,0,sizeof(char )*len);
    memset (shuzi,0,sizeof(int )*len);
    int shuzitop=-1;
    int fuhaotop=-1;
    for(int i=0;i<len;i++)
    {
        if('0'<=str[i]<='9')
            shuzi[++shuzitop]=str[i]-'0';
        if(str[i]=='-'||str[i]=='+'||str[i]=='*'||str[i]=='/')
        {
                if(str[i]=='*')
                {
                    int num1=shuzi[shuzitop];
                    int num2=str[++i];
                    num1*=num2;
                    shuzi[shuzitop]=num1;
            
                }
                if(str[i]=='/')
                {
                    int num1=shuzi[shuzitop];
                    int num2=str[++i];
                    num1/=num2;
                    shuzi[shuzitop]=num1;
                }
                else
                    fuhao[++fuhaotop]=str[i];    
        }
    }
    while(fuhaotop!=-1)
    {
        int a=shuzi[shuzitop--];
        int b=shuzi[shuzitop];//此处报错了
        if(fuhao[fuhaotop--]=='+')
        {
            b+=a;
            shuzi[shuzitop]=b;
        }
        if(fuhao[fuhaotop--]=='-')
        {


            b+=a;
            shuzi[shuzitop]=b;
        }
    }
    result=shuzi[shuzitop];
    delete [] shuzi;
    delete [] fuhao;
    return  result;
}
void main()
{
    char *a="1+2";
    printf("the result is :%d ",result(5,a));

[解决办法]
 while(fuhaotop!=-1 &&(fuhaotop >= 0))
[解决办法]

#include<iostream>
#include<string.h>
using namespace std;
int result(int len,char * str)
{
    int sum=0;
    char * fuhao=new char [len];
    int * shuzi=new int [len];
    memset (fuhao,0,sizeof(char )*len);
    memset (shuzi,0,sizeof(int )*len);
    int shuzitop=0;
    int fuhaotop=0;
    for(int i=0;i<len;i++) {
        switch(str[i]){
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
            shuzi[shuzitop]=str[i]-'0';shuzitop++;break;
            case '*':case '/':
            switch(str[i]){
case '*': shuzi[shuzitop] *= str[i+1]-'0';break;            
            case '/':shuzi[shuzitop] /= str[i+1]-'0'; break;
            }
            ++i;break;
            case '+':case '-':
            fuhao[fuhaotop]=str[i];
                  fuhaotop++;
                    break;
            }    
        }
    sum = shuzi[0];
    for(int i=1;i<shuzitop;++i){
        switch(fuhao[i-1]){
        case '+':sum += shuzi[i];break;
        case '-':sum -= shuzi[i];break;
        }
    }
    delete [] shuzi;
    delete [] fuhao;
    return  sum;
}
void main()
{


    char *a="1+2";
    cout<<"the result is :"<<result(5,a)<<endl;

热点排行