算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+
、-
、*
、\
以及左右括号()
,表达式不超过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]); } }
如果觉得有帮助,点个推荐啦~