把这个改成没有括号输出是错的
设计一个算法,判断一个含有()、[]、{}三种类型括号的表达式中所有括号是否匹配。输入格式:
输入一行字符串,如:(a++d)
输出格式:
如果括号匹配,输出“匹配", 否则输出"不匹配"
#include<bits/stdc++.h>
using namespace std;
//string s,a;
string a;
stack<char> s;
int main()
{
int n,i,j,flag=0;
cin>>a;
n=a.length();
for(i=0;i<n;++i)
{
if(a=='(' || a=='['|| a=='{')
s.push(a);
if(a==')')
{
if(s.empty()==1||s.top()!='(')
{
flag=1;break;
}
else s.pop();
}
if(a==']')
{
if(s.empty()==1||s.top()!='[')
{
flag=1;break;
}
else s.pop();
}
if(a=='}')
{
if(s.empty()==1||s.top()!='{')
{
flag=1;break;
}
else s.pop();
}
}
if(!s.empty())
flag=1;
if(flag==1)
{
cout<<"不匹配";
}
else
{
cout<<"匹配";
}
return 0;
}
不是输出"匹配"了吗?怎么就错了?如果你想在没有括号输出不匹配,自己加个标志变量 使用堆栈的思想,后进先出,建议楼主仔细琢磨,我们写出来是我们的,网上也有例子的
页:
[1]