`

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

 
阅读更多

一、要求:

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

二、 效果:

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;
}











分享到:
评论

相关推荐

    括号匹配(字符串d).cpp

    请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。 输入说明 输入为一个表达式字符串,长度不超过50。 输出说明 对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则...

    判断左右括号是否匹配

    问题:有一个数组里面存放了很多的字符,需要判断这一串字符里面的括号是否匹配。

    c语言实现的括号匹配算法 无括号算术表达式处理算法

    void BracketMatch(char *str) /* str[]中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配*/ { SeqStack S; int i; char ch; InitStack(&S); for(i=0; str[i]!='\0'; i++) /*对字符串中的...

    js代码-给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

    js代码-给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

    LeetCode判断字符串是否循环-Queue_Stack:依赖数组实现栈,实现链式队列,实现循环队列,两个栈实现一个队列,两个队列实现一个栈

    1、左右括号匹配 2、左括号多 3、右括号多 4、括号次序不匹配 步骤: 0、遍历给定字符串的每个元素 1、判断元素是否是左括号,若是左括号,则加入到栈中,若不是,执行第二步 2、元素是右括号,判断栈是否为空,若为...

    关于C的精粹包含至少200个C语言小程序

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C语言学习实例220例

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七部分 游戏篇 ...

    200个经典C程序【源码】

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    leetcode中国-leetcode:leetcode刷题

    用栈判断括号匹配 Regular Expression Matching 递归匹配 wildcard matching 动态规划 longest common prefix , 简单 valid number, hard, 用有限自动机 integer to roman ,easy , 模拟 roman to integer ,easy , ...

    C语言经典源代码实例 数据结构 操作系统 图形等

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C语言源代码实例.rar

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    经典的C程序220案列

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C语言220例从易到难源代码

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C语言程序源代码(大集合).rar

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    200个经典C程序源码小游戏

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 ...

    C语言常用算法

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C语言实例解析精粹

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C 语言实例解析精粹(第二版)(书+盘)

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    220个C源代码 初学C语言必备

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...

    C语言实例解析精粹(第二版) 光盘代码

    195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七部分 游戏篇 ...

Global site tag (gtag.js) - Google Analytics