佚名通过本文主要向大家介绍了c++括号匹配,安装c++2005出错,c++出错,c++,c++视频课程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:C++匹配[{}]出错
描述:
解决方案1:
描述:
问题很简单:
就是很简单的匹配‘[{()}]'是否匹配,我就试着使用栈的方式解决,可问题很大。代码如下,自己还属于菜鸟,希望大神不要嘲笑了。
#include<iostream>
#include<stack>
using namespace std;
bool seqIsValid(const char*);
char seqRight(char);
bool seqIsValid(const char *str){
stack<char> strStack;
for(;*str != '\0';str++){
if(!strStack.top()){
if(seqRight(strStack.top()) != *str){
strStack.push(*str);
}else{
strStack.pop();
}
}else{
strStack.push(*str);
}
}
if(!strStack.top()){
return false;
}
return true;
}
char seqRight(char ch){
switch(ch){
case '[':
return ']';
case '{':
return '}';
case '(':
return ')';
default:
return '\0';
}
}
int main(){
const char* test = "[{()}]";
if(seqIsValid(test)){
cout<<"seq is valid;"<<endl;
}else{
cout<<"is not valid"<<endl;
}
}
运行结果:
? tmp ./test
[1] 31495 segmentation fault ./test
搞定:
#include<iostream>
#include<stack>
using namespace std;
bool seqIsValid(const char*);
char seqRight(char);
bool seqIsValid(const char *str){
stack<char> strStack;
for(;*str != '\0';str++){
if(!strStack.empty()){
if(seqRight(strStack.top()) != *str){
strStack.push(*str);
}else{
strStack.pop();
}
}else{
strStack.push(*str);
}
}
if(!strStack.empty()){
return false;
}
return true;
}
char seqRight(char ch){
switch(ch){
case '[':
return ']';
case '{':
return '}';
case '(':
return ')';
default:
return '\0';
}
}
int main(){
const char* test = "[{()}]";
if(seqIsValid(test)){
cout<<"seq is valid;"<<endl;
}else{
cout<<"is not valid"<<endl;
}
}
解决方案1:
if (!strStack.empty())