数据结构中,括号匹配问题可以说是一个非常经典的问题。
【问题描述】假设一算术表达式中包括三种括号:圆括号“(”和“)”,方括号“[”和“]”,花括号“{”和“}”,且三种括号可按任意次序嵌套使用,试编写程序判定输入的表达式所含的括号是否正确配对出现(提示:表达式可以存入一个数据元素为字符的顺序表/数组中)。若匹配,则输出“Y”,否则输出“N”以及从左侧第一个不匹配字符的位置(从0开始编号)。【输入形式】含括号的算术表达式
【输出形式】Y 或者N 左侧第一个不匹配字符的位置
【样例输入】3+(44*]5-{6*[7*(45-10)]}])
【样例输出】N6
【样例说明】判断括号是否匹配涉及两方面,括号个数和出现次序的判定
#include<stdio.h>
int main()
{
int a[1000]={0};
for(int l=0;l<1000;l++)
{
a[l]=0;
}
int i,j,c;
int m;//第一个偶数出现的位置
m=0;
i=0;
j=999;
//储存整数数组
do
{
scanf("%d",&c);
{if(c%2==1)
a[i++]=c;
if(c%2==0)
a[j--]=c;//这样子做会让第一个偶数放在最后
}
}while (getchar()==',');
//计算m
for(i=0;i<1000;i++)
{
if(a[i]%2==1||a[i]==0)
m++;
}
//printf("%d",m);
//printf("\n");
//改变偶数的位置
int n=m;//储存m原来的值
int x=1000-m;
int y=0;
int b[x];
//复制偶数数组
for(j=0;j<x;j++)
{
b[j]=a[m];
m++;
}
for(m=n;m<1000;m++)
{
a[m]=b[x-1-y];
y++;
}
//计算非0的个数
int notzero=0;
for(j=0;j<1000;j++)
{
if(a[j]!=0)
notzero++;
}
j=0;
for(int k=0;k<1000;k++)
{
if(a[k]==0)
continue;
else
{
printf("%d",a[k]);
if(j<notzero-1)
{
putchar(',');
j++;
}
}
}
return 0;
}