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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一、要求:

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

二、效果:

三、思路:

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

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

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

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

四、核心代码:

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

}

五、所有代码:

代码

//BracketMatch.cpp

//judge a string whether is brackets match['(' and ')'] string, //while not match,return first position

//powered by alan

//2010.10.14

#include

#include

#include

using namespace std;

int main() {

//define data

string brackets = "";

stack bracketStack;

char tmp;

enum Res{matched,nMatch}res;

res = matched;

int bottom = 0;

//get input

cout<<"输入需要匹配的括号串"<

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<<"括号字符串匹配!"<

break;

case nMatch:

cout<<"第"<

break;

}

return0;

}

相关文档
最新文档