您的位置:首页 > 编程语言 > C语言/C++

(学习笔记)C++括号匹配----栈的应用

2010-02-23 19:15 676 查看
#include <iostream>
#include <stack>
#include <string>
using namespace std;
short judge(char c) {
switch(c) {
case '(':
case '[':
case '{':
return -1;//开放符号,即左括号
case ')':
case ']':
case '}':
return 1;//封闭符号,即右括号
default:
return 0;//其他符号
}
}
bool match(char a,char b) {
switch(b) {
case ')':
return (a == '(')? true : false;
case ']':
return (a == '[')? true : false;
case '}':
return (a == '{')? true : false;
default:
return false;
}
}
int main() {
string input;
char c;
stack<char> Stack;
cout << "输入一个字符串:";
cin >> input;
string::iterator p = input.begin();
while(p != input.end()) {
c = *p;
switch(judge(c)) {
case -1:
Stack.push(c);
break;
case 0:
break;
case 1:
if(Stack.empty() == true)
cerr << "缺少左括号!" << endl;
if(match(Stack.top(),c) == true)
Stack.pop();
else {
cerr << "括号不匹配!" << endl;
return 0;
}
}
++p;
}
if(Stack.empty() == false)
cerr << "缺少右括号!" << endl;
else
cout << "匹配成功!" << endl;
return 0;
}


思路:做一个空栈,读入字符直至文件尾。如果字符是一个开放符号,则将其压入栈中。如果字符是一个封闭符号,那么若栈为空,则报错;若栈不为空,则将栈元素弹出。如果弹出的符号不是对应的开放符号,则报错。在文件尾,如果栈非空则报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: