算法训练 删除多余括号
来源:互联网 发布:react router 数据 编辑:程序博客网 时间:2024/04/29 09:17
问题描述
从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简。另外不考虑’+’ ‘-‘用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形。
输入格式
表达式字符串,长度不超过255, 并且不含空格字符。表达式中的所有变量都是单个小写的英文字母, 运算符只有加+减-乘*除/等运算符号。
输出格式
去掉多余括号后的表达式
样例输入
样例一:
a+(b+c)-d
样例二:
a+b/(c+d)
样例三:
(a*b)+c/d
样例四:
((a+b)*f)-(i/j)
样例输出
样例一:
a+b+c-d
样例二:
a+b/(c+d)
样例三:
a*b+c/d
样例四:
(a+b)*f-i/j
#include <stdio.h>int hasExcess(char s[], int leftBracket, int rightBracket){ int i, leftAcount; //判断"-(a+b)"类型 if(s[leftBracket-1] == '-'){ i = leftBracket; leftAcount = 1; while(++i < rightBracket){ if(s[i] == '(') leftAcount ++; if(s[i] == '+' && leftAcount == 1) return 0; } } if(s[leftBracket-1] == '/') return 0; //判断"加或减(a 任意 b)加或减"类型 if(s[leftBracket-1] != '*' && s[leftBracket-1] != '/' && s[rightBracket+1] != '*' && s[rightBracket+1] != '/') return 1; //判断"*(a*b)乘或除以"类型 i = leftBracket; leftAcount = 1; while(++i < rightBracket){ if(s[i] == '(') leftAcount ++; if(s[i] == '*' && leftAcount == 1) return 1; } return 0;}int delExcessBracket(char s[], int index){ int leftBracket, rightBracket; while(s[index] != '\0'){ if(s[index] == ')') return index; if(s[index] == '('){ leftBracket = index; index = rightBracket = delExcessBracket(s, index+1); if(hasExcess(s, leftBracket, rightBracket)) s[leftBracket] = s[rightBracket] = ' '; } index ++; }}int main(){ char str[100]; int i; scanf("%s", str); delExcessBracket(str, 0); i = -1; while(str[++i] != '\0'){ if(str[i] != ' '){ printf("%c", str[i]); } } return 0;}
0 0
- 算法训练 删除多余括号
- 算法训练 字符删除
- 算法训练 字符删除
- 算法训练 字符删除
- 算法训练 字符删除
- 算法训练 字符删除
- 多余元素删除之移位算法
- 多余元素删除之建表算法
- 多余元素删除之移位算法
- 多余元素删除之移位算法
- 多余元素删除之建表算法
- 多余元素删除之移位算法
- 多余元素删除之建表算法
- 蓝桥杯 算法训练 字符删除
- 在单链表中删除值相同的多余结点的算法。
- 顺序表应用1:多余元素删除之移位算法
- 顺序表应用1:多余元素删除之移位算法
- 顺序表应用1:多余元素删除之移位算法
- struts1学习笔记(1.5)
- SQLite
- Android 图片相关注意事项
- vc使用jsoncpp头文件冲突问题
- Android中对话框(Dialog)的创建方法
- 算法训练 删除多余括号
- ImageLoader图片处理
- 汇编语言:三个数比较大小,输出最小的那个数。
- Java:String、StringBuffer和StringBuilder区别
- poj1511小灶第三次作业(dijstra)
- Android自定义控件系列案例【三】
- LRU 和 FIFO 页面置换算法
- URL访问网站的整个过程,并描述用到的算法和协议
- POJ 2418(字符串HASH)