字符串中左右括号匹配判断

一、要求:

判断一个字符串中的小括号是否匹配。例如,字符串“((())())”中的小括号匹配,而“)()”中的小括号不匹配。如果匹配则提示匹配,如果不匹配则提示第一个不匹配的括号的位置。

二、 效果:

clip_image002

三、思路:

得到字符串,从头开始,一个一个字符判断。

(1) 如果是左括号则压入栈中。

(2) 如果是右括号,则将一个左括号从栈中弹出,匹配一对。若此时栈中无元素,那么这个右括号没有匹配的左括号。

最后,如果栈不为空,则有左括号没有匹配。

四、核心代码:

:

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> // BracketMatch.cpp
// judge a string whether is brackets match['(' and ')'] string,
// while not match,return first position
// powered by alan
// 2010.10.14

#include
< iostream >
#include
< string >
#include
< stack >

using namespace std;

int main() {
// define data
string brackets = "" ;
stack
< char > bracketStack;
char tmp;
enum Res{matched,nMatch}res;
res
= matched;
int bottom = 0 ;

// get input
cout << " 输入需要匹配的括号串 " << endl;
cin
>> brackets;

// judge
int i;
for (i = 0 ; i < brackets.length(); i ++ ) {
if (brackets[i] == ' ( ' ) {
// 1.left bracket
bracketStack.push( ' ( ' );
if (bracketStack.size() == 1 ) {
bottom
= i;
}
}
else if (brackets[i] == ' ) ' ) {
// 2.right bracket
if ( ! bracketStack.empty()) {
tmp
= bracketStack.top();
bracketStack.pop();
}
else {
res
= nMatch;
// move to wrong position
i ++ ;
break ;
}
}
// ingore non bracket
}

// have '(' not match
if ( ! bracketStack.empty()){
res
= nMatch;
// get the first not match
i = bottom + 1 ;
}

switch (res) {
case matched:
cout
<< " 括号字符串匹配! " << endl;
break ;
case nMatch:
cout
<< " " << i << " 个括号字符串不匹配! " << endl;
break ;
}

return 0 ;
}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值