题目
试编写一个算法,检查一个程序中的花括号、方括号和圆括号是否配对,若全部配对,则返回1,否则返回0。对于程序中出现的一对单引号或者双引号内的字符不进行括号配对检查。39为单引号ASCII值,34为双引号的ASCII值。单引号和双引号如果出现则成对出现。
int bracketsCheck(char f[]){// 对由字符数组f所存字符中的文本进行括号匹配检查
stack S, char ch;
char *p = f;
while(*p!='\0'){// 顺序扫描串中的每一个字符
if(*p==39) {
++p; // 跳过第一个单引号
while(*p!=39){//39为单引号的ASCII值
++p;
}
++p; //跳过最后一个单引号
}else if(*p==34){//双引号内的字符不参与配对比较
++p; //跳过第一个双引号
while(*p!=34){// 34为双引号的ASCII值
++p;
}
++p; //跳过最后一个双引号
}else{
switch(*p){
case '{':
case '}':
case '(':
push(S,*p);//出现左括号:{ 、[和(进栈
break;
case '}':
getTop(S,ch);
if(ch=='{'){
pop(S,ch); //栈顶的左花括号出栈
}else{
return 0;
}
break;
case ']':
getTop(S,ch);
if(ch=='['){//栈顶的左方括号出栈
pop(S,ch);
}else{
return 0;
}
break;
case ')':
getTop(S,ch);
if(ch=='('){//栈顶的左圆括号出栈
pop(S,ch);
}else{
return 0;
}
}
++p; //下一个字符
}
}
if(isEmpty(S)){
return 1;
}else{
return 0;
}
}