zoukankan      html  css  js  c++  java
  • 习题3.11 表达式转换(25 分)浙大版《数据结构(第2版)》题目集

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

    输入格式:

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

    输出格式:

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

    输入样例:

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

    输出样例:

    2 3 7 4 - * + 8 4 / +

    由于当时提交对了,没去深究,后来同学发现了错误,进行了更改。
    思路搞清楚就好,比较烦人有小数,有正负号,正好不用输出,负号要随数字输出,所以总的分为两块第一块是数字包括1-9和小数点,以及第一位就是正负的或者括号后面紧跟着正负,这些属于数字,第二类就是负号加减乘除以及括号,左括号要读入,在与他匹配的右括号出现之前,只输出左括号之后的负号,右括号出现,则抵消掉左括号继续输出。

    c++
    代码:


    #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 --;
    
                }
                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;
    }

    c

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    void printk()
    {
        static int flag = 0;
        if(flag)putchar(' ');
        flag ++;
    }
    int main()
    {
        char s[21];
        int  c = 0;
        char a[21];
        scanf("%s",a);
        for(int i = 0;a[i];i ++)
        {
            if((a[i] == '+' || a[i] == '-') && (!i || a[i - 1] == '(') || a[i] >= '0' && a[i] <= '9')
            {
                printk();
                if(a[i] != '+')
                {
                    putchar(a[i]);
                }
                while(a[i + 1] == '.' || a[i + 1] >= '0' && a[i + 1] <= '9')
                {
                    i ++;
                    putchar(a[i]);
                }
            }
            else
            {
                if(a[i] == ')')
                {
                    while(c && s[c - 1] != '(')
                    {
                        printk();
                        putchar(s[-- c]);
                    }
                    if(c)-- c;
                    
                }
                else
                {
                    if(!c)
                    {
                        s[c ++] = a[i];
                        continue;
                    }
                    while(c && s[c - 1] != '(')
                    {
                        if(a[i] == '(' || (a[i] == '*' || a[i] == '/')&&(s[c - 1] == '-' || s[c - 1] == '+'))
                        {
                            break;
                        }
                        printk();
                        putchar(s[-- c]);
                    }
                    s[c ++] = a[i];
                }
            }
        }
        while(c)
        {
            printk();
            if(s[c - 1] != '(')putchar(s[-- c]);
        }
    }
  • 相关阅读:
    html基础进阶笔记
    程序员的自我提升
    过滤思路
    for循环
    jeesite在生成主子表代码的时候在eclipse里面没有子表代码
    java学习笔记2
    人性的弱点
    java学习笔记
    Percona Toolkit 安装使用
    mysql 中查询当天、本周,本月,上一个月的数据
  • 原文地址:https://www.cnblogs.com/8023spz/p/7635353.html
Copyright © 2011-2022 走看看