题目要求:检查一个程序中的花括号、方括号、圆括号是否匹配,若全部匹配返回1,否则返回0,。对于程序中出现的一对单引号或双引号内的字符不进行检查。
将返回值改成了打印提示信息的形式。
#include <stdio.h>
typedef struct
{
int data[15];
int top;
}st;
void main()
{
st st;
st.top=-1;
int tag=0;//引号出错状态标示符
char *string ="\"{\'\'(as\')(\"\'})";
while (*string!='\0')
{
/*引号越过部分*/
if (int(*string)==34)//单引号
{
string++;
while (int(*string)!=34&&*string!='\0')//找到一个单引号便一直往下找
{
string++;
}
if (*string=='\0')//找到最后未匹配成功
{
printf("error\n");
tag=1;
break;
}
else string++;//匹配成功则越过引号部分
}
if (int(*string)==39)//双引号
{
string++;
while (int(*string)!=39&&*string!='\0')//找到一个双引号便一直往下找
{
string++;
}
if (*string=='\0')//找到最后未匹配成功
{
printf("error\n");
tag=1;
break;
}
else string++;//匹配成功则越过引号部分
}
/*引号越过部分*/
/*三种括号匹配部分*/
if (int(*string)!=40&&int(*string)!=41&&int(*string)!=91&&int(*string)!=93&&int(*string)!=123&&int(*string)!=125)//非括号
{
string++;
}
else if (int(*string)==40||int(*string)==91||int(*string)==123)
{
st.data[++st.top]=int(*string);//括号左部入站
string++;
}
if (int(*string)==41)//右小括号
{
if (st.data[st.top]==40)//栈定是左小括号
{
st.top--;//左小括号出栈
string++;
}
else
{
printf("error\n");
break;
}
}
if (int(*string)==93)//右中括号
{
if (st.data[st.top]==91)//栈定是左中括号
{
st.top--;//左中括号出栈
string++;
}
else
{
printf("error\n");
break;
}
}
if (int(*string)==125)//右大括号
{
if (st.data[st.top]==123)//栈定是左大括号
{
st.top--;//左大括号出栈
string++;
}
else
{
printf("error\n");
break;
}
}
/*三种括号匹配部分*/
}
if (st.top==-1&&tag==0)
printf("no error\n");
}