您的位置:首页 > 其它

用栈来实现括号匹配问题

2015-10-24 23:16 239 查看
在这里只做简单的一个括号匹配的问题

其实思想都是一样的,若碰到左的,都入栈,右的,且原来的栈不为空,则拿出来进行匹配,成功了则继续往下做,否则,直接跳出循环。

在这里为了省略起见,用了stl

#include<iostream>
#include<stack>
#include<cstring>
#include<string>
using namespace std;
int main() {
int i, j, k, n, m;
char s[100];
bool flag;
while (cin >> s) {
flag = true;
stack<char>a;
while (!a.empty()) {
a.pop();
}
//这里是核心的代码,在做匹配的时候,若碰到左括号则入栈,碰到右括号且栈不为空,则出栈一个,
//否则直接跳出循环,失败,最后还要检查栈是否为空
for (i = 0; i < strlen(s); i++) {
if (s[i] == '(')
a.push(s[i]);
else  if (s[i] == ')'&&a.empty() == false)
a.pop();
else if (s[i] == ')'&&a.empty()) {
flag = false;
break;
}
else
continue;
}
if (a.empty() == false)
flag = false;
if (flag)
cout << "成功";
else
cout << "失败";
cout << endl;
}
return 0;
}




比较好得有http://blog.csdn.net/kkkkkxiaofei/article/details/8293980 http://blog.chinaunix.net/uid-7864162-id-2038901.html这两个博客个人感觉写的比较好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: