码迷,mamicode.com
首页 > 其他好文 > 详细

习题3.11 表达式转换(25 分)浙大版《数据结构(第2版)》题目集

时间:2017-10-07 19:48:37      阅读:425      评论:0      收藏:0      [点我收藏+]

标签:3.1   ++   bsp   clu   字符   超过   stat   lag   设计程序   

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

输入格式:

输入在一行中给出不含空格的中缀表达式,可包含+-*\以及左右括号(),表达式不超过20个字符。

输出格式:

在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。

输入样例:

2+3*(7-4)+8/4

输出样例:

2 3 7 4 - * + 8 4 / +


思路搞清楚就好,比较烦人有小数,有正负号,正好不用输出,负号要随数字输出,所以总的分为两块第一块是数字包括1-9和小数点,以及第一位就是正负的或者括号后面紧跟着正负,这些属于数字,第二类就是负号加减乘除以及括号,左括号要读入,在与他匹配的右括号出现之前,只输出左括号之后的负号,右括号出现,则抵消掉左括号继续输出。


代码:


#include <iostream>
#include <map>
#include <algorithm>
#include <stack>

using namespace std;
void printk()
{
    static int flag = 0;
    if(flag)cout<< ;
    flag ++;
}
int main()
{
    char s[50];
    int  c = 0;
    string a;
    cin>>a;
    map<char,int>p;
    p[*] = p[/] = 1;
    p[(] = p[)] = 2;
    for(int i = 0;i < a.size();i ++)
    {
        if((i < 1 || a[i - 1] == ()&&(a[i] == + || a[i] == -)  || a[i] == . || a[i] >= 0 && a[i] <= 9)
        {
            printk();
            if(a[i] != +)cout<<a[i];
            while(a[i + 1] == . || a[i + 1] >= 0 && a[i + 1] <= 9)
            {
                i ++;
                cout<<a[i];
            }
        }
        else
        {
            if(a[i] == ))
            {
                while(c && s[c - 1] != ()
                {
                    cout<< <<s[c - 1];
                    c --;
                }
                c --;
                while(c && s[c - 1] != ()
                {
                    cout<< <<s[c - 1];
                    c --;
                }
            }
            else if(!c || p[a[i]] > p[s[c - 1]])
            {
                s[c ++] = a[i];
            }
            else
            {
                while(c && s[c - 1] != ()
                {
                    cout<< <<s[c - 1];
                    c --;
                }
                s[c ++] = a[i];
            }
        }
    }
    while(c)
    {
        cout<< <<s[c - 1];
        c --;
    }
    cout<<endl;
}

 

习题3.11 表达式转换(25 分)浙大版《数据结构(第2版)》题目集

标签:3.1   ++   bsp   clu   字符   超过   stat   lag   设计程序   

原文地址:http://www.cnblogs.com/8023spz/p/7635353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!