括号匹配
2015-09-22 12:23
344 查看
给定一个字符串,设计一个算法消除中间成对的括号,如果括号不成对,提示异常(error)
如(1,(2,3),(4,(5,6),7))转化为1,2,3,4,5,6,7
如(1,)2,3),(4,(5,6(,7))提示error。
代码如下:
效果如下:
![](http://t2.qpic.cn/mblogpic/57b60d822afdbe2befce/2000.jpg)
图(1) 括号匹配时的情况
![](http://t2.qpic.cn/mblogpic/2ddf3212410ee541724e/2000.jpg)
图(2) 括号不匹配时的情况
如(1,(2,3),(4,(5,6),7))转化为1,2,3,4,5,6,7
如(1,)2,3),(4,(5,6(,7))提示error。
代码如下:
#include <stack> #include <iostream> using namespace std; /*判断表达式是否合法*/ bool IsValid(char *str) { if (NULL == str) return false; stack<char> op; while (*str) { if (*str == '(') { op.push(*str++); } else if (*str == ')') { if (op.empty()) return false; else op.pop(); str++; } else { str++; } } if (op.empty()) return true; else return false; } /*消除中间的括号*/ char *Elimination_brackets(char *str) { if (str == NULL) //字符串为空返回 return str; char* temp = new char[strlen(str) + 1]; char* result = temp; //*temp++ = *str++; //跳过第一个左括号 while (*str != '\0') { if (*str == ')' || *str == '(') //有括号,跳过赋值 { str++; continue; } *temp++ = *str++; } //*temp++ = ')'; //将右括号加上 *temp = '\0'; return result; } int main() { //char str[] = "(1,(1,0),3)"; char str[256]; cin.getline(str,256); if (IsValid(str)) { printf("%s\n",Elimination_brackets(str)); printf("\n"); } else{ printf("error!\n"); } return 0; }
效果如下:
![](http://t2.qpic.cn/mblogpic/57b60d822afdbe2befce/2000.jpg)
图(1) 括号匹配时的情况
![](http://t2.qpic.cn/mblogpic/2ddf3212410ee541724e/2000.jpg)
图(2) 括号不匹配时的情况
相关文章推荐
- spring websocket自动断开连接再创建引发的问题解决方案
- c语言学习笔记(3)const和volatile以及const volatile int i=0分析
- IOS-UI-基础开发
- 【Bootstrap】兼容IE8、谷歌和其他主流浏览器的观众IMAX风格的页面
- 关于nRF24L01地址问题
- winform实现拖动文件到窗体上的方法
- onActivityResult无故被调用
- 小白进行时,char* 转 CString
- 潘鹏整理WPF(8)列表控件ListBox&&ComboBox
- 浮点型计算如何确定精度
- linux常用命令(44):netstat 命令
- java于23设计模式
- more命令
- hihocoder 1233 Boxes
- css初始化代码
- IOS视图旋转可放大缩小
- 简单随机密码生成
- javascript删除提示弹出况确认
- oracle left join优化
- 机器学习算法基础概念学习总结