刺客信条叛变剧情分析:括号匹配(C语言问题,不要C++)追加30分!

来源:百度文库 编辑:高考问答 时间:2024/04/28 05:11:48
【问题描述】
假设一个输入字符串中包含圆括号、方括号和花括号三种类型的括号,以及其它一些任意字符。编写程序,判别串中的括号是否正确匹配,即:
1. 各种左、右括号的个数要一致;
2. 要符合正确的嵌套规则。

【输入形式】
从当前目录下correct.in文件中读入一行字符串。字符串最大长度80,不含空格。

【输出形式】
输出到当前目录下correct.out文件中。输出只有一个单词,如果括号匹配则输出“True”到文件中,否则输出“False”。在输出末尾要有一个回车符。

【输入样例】
设输入文件内容如下:

rhe+[35(fjej)w-wr3f[efe{feofds}]

【输出样例】
输出文件内容为:

False

【样例说明】
输入字符串为rhe+[35(fjej)w-wr3f[efe{feofds}],在式中“[”与“]”的个数不一致,不符合嵌套规则,故输出为“False”。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define LEN 80

typedef struct list
{
char node;
struct list* next;
}list,*plist;

void iniList(plist);
int isEmpty(plist);
int listAppend(plist,char);
int delBracketsFormList(plist);

int main(int argc,char* argv[])
{
FILE *in,*out;
char test[LEN];
int i;
list a;
plist p;
p=&a;
iniList(p);

in=fopen("correct.in","r");
out=fopen("correct.out","w");

fscanf(in,"%s",test);

for (i=0;i<LEN;i++)
{
switch(test[i])
{
case '[':
case ']':
case '{':
case '}':
case '(':
case ')':
listAppend(p,test[i]);
break;
default:continue;
}
}
delBracketsFormList(p);
if (isEmpty(p))
{
fprintf(out,"True\n");
}
else
fprintf(out,"False\n");

fclose(in);
fclose(out);
return 0;
}

void iniList(plist aplist)
{
aplist->next=NULL;
aplist->node='\0';
}

int isEmpty(plist aplist)
{
return aplist->next==NULL?1:0;
}

int listAppend(plist aplist,char a)
{
plist bplist=aplist,anode;

while (bplist->next)
{
bplist=bplist->next;
}

anode=(plist)malloc(sizeof(list));

if (!anode)
exit(-1);
anode->node=a;
anode->next=NULL;
bplist->next=anode;
return 0;
}

int delBracketsFormList(plist aplist)
{
plist temp;
int has=1;
if (isEmpty(aplist))
return 0;

while(has)
{
has=0;
temp=aplist;
while (temp->next)
{
if(temp->next->next)
{
if((temp->next->next->node-temp->next->node==1)||(temp->next->next->node-temp->next->node==2))
{
temp->next = temp->next->next->next;
has=1;

}
else
temp = temp->next;
}
else
temp =temp->next;
if(!has)
break;
}

}
return 0;
}

老师说delBracketsFormList(plist)的算法有问题,不能正确处理(((2+3)*5)-6)的情况。
请朋友帮忙看看要怎么改啊

这个问题就是字符串处理。
简单,但麻烦