7-3 括号匹配
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
#include<stack>
#include<iostream>
using namespace std;
int main()
{
stack<char> s;
char str[105];
cin.getline(str, 105);
int flag = 1;
int i;
for( i = 0 ; str[i] ; i++){
if(str[i] == '(' || str[i] == '{' || str[i] == '['){
s.push(str[i]);
}else if(str[i] == ')' && !s.empty() && s.top() != '('){
flag = 0;
break;
}else if(str[i] == '}' && !s.empty() && s.top() != '{'){
flag = 0;
break;
}else if(str[i] == ']' && !s.empty() && s.top() != '['){
flag = 0;
break;
}else if(str[i] == ')' && !s.empty() && s.top() == '('){
s.pop();
}else if(str[i] == ']' && !s.empty() && s.top() == '['){
s.pop();
}else if(str[i] == '}' && !s.empty() && s.top() == '{'){
s.pop();
}else if(str[i] == ')'){
flag = 0;
break;
}else if(str[i] == '}'){
flag = 0;
break;
}else if(str[i] == ']'){
flag = 0;
break;
}
}
if(flag == 1 && s.empty()){
cout << "yes" << endl;
}else{
cout << "no" << endl;
}
return 0;
}
这个题主要就是输入的时候需要注意有空格的存在,需要使用cin.getline( 存储变量 , 存储空间大小 ) ; 进行输入,剩下的程序处理很简单。