swuetoj(表达式转换(0309)

来源:互联网 发布:两少一宽 知乎 编辑:程序博客网 时间:2024/05/29 19:03

给出一个括号算术表达式,表达式中包含:操作符:+、-、*、/、^,并且操作符的优先级依次增高;小写字母a, b, c,…, z;小括号()。算术表达式以中缀形式给出,如(a+b),我们假定表达式中没有出现连续两个以上操作符的情形,比如a*b*c,这种形式会表达成(a*(b*c))或((a*b)*c)。并且算术表达式总是以”(“开始,以“)”结束。请将给定的字条串转换成后缀形式。(见示例输入输出)

Description

T,表达式的个数(T <= 100) 以下T行,每行包括一个表达式,并且算术表达式(算术表达式长度小于200)

Input

输出转换后的字符串,每行一组测试数据

Output

3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))
Sample Input

abc*+
ab+zx+*
at+bac++cd+^*
这道题简化了的,她都加入了括号
#include<stdio.h>#include<iostream>#include<stack>#include<string.h>using namespace std;int main(){int n;while (cin >> n){stack<char>q;for (int i = 0; i < n; i++){char a[200];cin >> a;for (int j = 0; j < strlen(a); j++){if (a[j] >= 'a'&&a[j] <= 'z')cout << a[j];//数据就输出else{if (a[j] != ')')q.push(a[j]);//不是反括号就进栈else{while (1){if (q.top() == '(')//是就出栈{q.pop();break;}else{cout << q.top();q.pop();}}}}}cout << endl;}}return 0;}

1 1
原创粉丝点击