问题描述
假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。
例

输入
包含圆括号、方括号两种类型括号的算术表达式
输出
匹配输出Match succeed!
不匹配输出 Match false!
例

样例
输入(1)
[1+2*(3+4*(5+6))]
输出(1)
Match succeed!
输入(2)
(1+2)*(1+2*[(1+2)+3)
输出(2)
Match false!
代码
#include<cstdio>
#include<stack>
using namespace std;
stack <char> q;
int main()
{
char c;
int i=0;
int count=0;
while((c=getchar())!='\n')
{
if(c>='0'&&c<='9')
{
continue;
}
else if((c=='+')||(c=='-')||(c=='*')||(c=='/'))
{
continue;
}
else
{
if(count==0)
{
q.push(c);
count++;
}
else
{
if(c=='('||c=='[')
{
q.push(c);
count++;
}
else if(c==')')
{
char tmp;
tmp=q.top();
if(tmp=='(')
{
q.pop();
count--;
}
else
{
q.push(c);
count++;
}
}
else if(c==']')
{
char tmp;
tmp=q.top();
if(tmp=='[')
{
q.pop();
count--;
}
else
{
q.push(c);
count++;
}
}
}
}
}
if(count==0)
{
printf("Match succeed!\n");
}
else
{
printf("Match false!\n");
}
return 0;
}
该程序使用栈数据结构检查一个包含圆括号和方括号的算术表达式,判断括号是否匹配。当遇到开括号时,将其压入栈中;遇到闭括号时,检查栈顶的开括号类型,匹配则弹出栈顶元素,不匹配则返回错误。最终栈为空表示括号匹配成功,否则匹配失败。
872

被折叠的 条评论
为什么被折叠?



