字符串中左右括号匹配判断
来源:互联网 发布:mac怎么安装字体到ps 编辑:程序博客网 时间:2024/06/05 03:09
一、要求:
判断一个字符串中的小括号是否匹配。例如,字符串“((())())”中的小括号匹配,而“)()”中的小括号不匹配。如果匹配则提示匹配,如果不匹配则提示第一个不匹配的括号的位置。
二、 效果:
三、思路:
得到字符串,从头开始,一个一个字符判断。
(1) 如果是左括号则压入栈中。
(2) 如果是右括号,则将一个左括号从栈中弹出,匹配一对。若此时栈中无元素,那么这个右括号没有匹配的左括号。
最后,如果栈不为空,则有左括号没有匹配。
四、核心代码:
:
代码
//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;
}
//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;
}
- 字符串中左右括号匹配判断
- 判断一个字符串中括号是否匹配
- 判断一个字符串中括号是否匹配
- php判断字符串中前后括号是否匹配
- 判断表达式左右括号是否匹配(栈)
- 如何判断一个表达式中的左右括号是否匹配
- 判断字符串中的括号是否匹配
- 判断字符串里的括号是否匹配
- 判断一个括号字符串是否匹配正确
- 判断字符串中的括号是否匹配
- 判断一个括号字符串是否匹配
- 用栈来判断括号字符串是否匹配
- PHP判断表达式中括号是否匹配
- 字符串——判断一个括号字符串是否匹配
- 判断括号是否匹配
- 判断括号是否匹配
- hdu4915 判断括号匹配
- 括号匹配判断
- 搜索引擎体系结构设计
- Java/.NET互操作性:Web Services 并不总是答案
- OpenInventor培训总结2
- CHM文件打不开的解决办法
- 爱情
- 字符串中左右括号匹配判断
- 您的钱包选对颜色了吗
- .Net 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩(改进)
- SQL 系统存储过程用法整理
- Open Inventor学习资源
- Why does Quora use MySQL as the data store instead of NoSQLs such as Cassandra, MongoDB, CouchDB etc?
- 利用图片链接跳转网页的方法
- 第一个Django应用
- JS设置title的样式