用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

表达式转换

2017-10-22 作者: 芙蓉妹妹举报

[c++]代码库

#include<bits/stdc++.h>
using namespace std;
void cspace(int &f)//输出
{
    if(f)
    {
        cout<<" ";
        f=0;
    }
}
int zhengfu(char c)//判断是否是+、-号
{
    if(c=='+'||c=='-')
        return 1;
    return 0;
}
int num(char c)//判断是否是数字或小数点
{
    if((c>='0'&&c<='9')||c=='.')
        return 1;
    return 0;
}
int youxian(char a,char b)//符号优先级
{
    if(b==')')
        return 1;
    if(a=='('||b=='(')
            return 0;
    switch(b)
    {
    case '+':
    case '-':
        return 1;
    case '*':
    case '/':
        switch(a)
        {
        case '*':
        case '/':
            return 1;
        case'+':
        case'-':
            return 0;
        }
    }
}
int main()
{
    char a[21],s[21];
    cin>>a;
    int length=strlen(a),m=0,flag=0;//m是栈的下标,flag记录空格
    for(int i=0; i<length; i++)
    {
        if(zhengfu(a[i])&&!num(a[i-1])&&a[i-1]!=')')
        {
            if(a[i]=='-')//正号不输出
            {
                cspace(flag);
                cout<<"-";
            }
        }
        else if(num(a[i]))//数字直接输出
        {
            cspace(flag);
            cout<<a[i];
        }
        else
        {
            if(m)
            {
                if(a[i]==')')
                    while(m--)
                    {
                        if(s[m]=='(')
                            break;
                        cout<<" "<<s[m];
                    }
                else
                {
                    while(m)
                    {
                        if(youxian(s[m-1],a[i]))
                            cout<<" "<<s[--m];
                        else break;
                    }
                    s[m++]=a[i];
                }
            }
            else s[m++]=a[i];
            for(int j=0; j<m; j++)
                if(s[j]!='(')
                {
                    flag=1;
                    break;
                }
        }
    }
    while(m--)
        cout<<" "<<s[m];
    return 0;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...