<实例>消除内嵌括号——使用栈实现
来源:互联网 发布:网络营销软件 编辑:程序博客网 时间:2024/05/21 17:05
题目:给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。
解题思路:下面解法的大前提是括号必须是匹配的
有几个点需要注意:1.输入不应该为空
2.输入的左括号数和右括号数要匹配
3.第一个出现的应该是左括号
#include <iostream>#include <string>#include <stack>using namespace std;void format_turn(string str){stack<char> brace; //括号栈stack<char> num; //数字栈stack<char> result; //结果栈//输入字符串如果为空,则返回if(str.empty()){cout<<"表达式有误:输入不能为空"<<endl;return;}//根据每个字符进行相应的栈操作for(string::size_type i=0; i<str.size(); i++){if( str[i]>='1' && str[i]<='9' ) //如果是1-9字符,压入数字栈中num.push( str[i] );else if( str[i] == '(' ) //如果是(,则直接压入括号栈brace.push( str[i] );else if( str[i] == ')' ) //如果是),先判断括号栈是否为空,空则缺少对应(,非空则将栈顶元素弹出{if( !brace.empty() ){brace.pop();}else{cout<<"表达式有误:缺少左括号"<<endl;return;}}}//对字符串全部操作后,判断括号栈是否为空,如果不为空,则表示缺少对应括号,报错;//如果为空,则表示括号全部去除,将数字栈中数据压入结果栈if( !brace.empty() ){cout<<"表达式有误:缺少右括号"<<endl;return;}else{while( !num.empty() ){result.push( num.top() );num.pop();}}//输出最终结果while( !result.empty() ){cout<<result.top()<<' ';result.pop();}cout<<endl;}void main(){string str;cout<<"请按规定格式输入:";getline( cin, str );cout<<"去嵌套括号后输出为:";format_turn(str);}结果:
0 0
- <实例>消除内嵌括号——使用栈实现
- PPTV面试题——括号消除
- 简单算法——使用栈实现括号匹配检验
- C实例---括号匹配(栈实现)
- 使用栈实现括号匹配
- 数据结构——栈实现括号匹配
- 栈的应用实例之——括号匹配
- 栈实例-括号匹配
- 数据结构的应用——使用栈实现字符串括号匹配检查
- 使用栈实现括号匹配算法-java
- 使用栈来实现括号匹配
- 消除嵌套括号
- Java双括号初始化——匿名内部类
- 数据结构(二)——栈及实现、括号匹配
- 括号匹配问题——用栈实现
- 栈实例-括号匹配检验
- 递归的使用——关于括号排列(分别使用Java和C++算法实现)
- 顺序栈使用——括号匹配的检验
- IFrame语法,实例
- ubuntu多个gcc版本切换
- 不安装cygwin而只在windows下运行bundler
- 一步一步教你调试JNI
- URAL 1517 Freedom of Choice (后缀数组 输出两个串最长公共子串)
- <实例>消除内嵌括号——使用栈实现
- HDU 1997 汉诺塔VII
- ubuntu12.04 创建启动器图标
- 阿布学排序之冒泡排序
- 南宁去痘要多少费用 国家公立甲等医院
- String存放在堆中还是栈中
- 利用DHT网络原理制作bt采集蜘蛛,开源版
- U-boot的环境变量: bootcmd 和bootargs。
- 字节输入流和字符输入流