【正确答案】
【答案解析】在算法中,扫描程序中的每一个字符,当扫描到花、中、圆左括号时,令其进栈,当扫描到花、中、圆右括号时,则检查栈顶是否为相应的左括号,若是则作退栈处理,若不是则表明出现了语法错误,应返回0。当扫描到程序文件结尾后,若栈为空则表明没有发现括号配对错误,应返回1,否则表明栈中还有未配对的括号,应返回0。另外,对于一对单引号或双引号内的字符不进行括号配对检查。
根据分析,编写出算法如下:
int BracketsCheck (char
*
f){
//对由f所指字符串中的文本进行括号配对检查
stack S;char ch; //定义一个栈
char
*
p=f;
while(*p!="\0"){ //顺序扫描字符串中的每一个字符
if (
*
p==39){ //单引号内的字符不参与配对比较
while (
*
p!="\0"&&"P!=39) //39为单引号的ASCII值、p++;
}
else if(
*
p!="\0"&&
*
p==34){ //双引号内的字符不参与配对比较
while(
*
p!="\0"&&
*
p!=34) //34为双引号的ASCII值p++;
}
if (
*
p!="\0"){
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);
}
}