题目1029:魔咒词典
注意:定义整形的变量 int i ,一不小心混到char里面,
搞成char i ,这样各函数单步调试,排错了个小时
绝望的找不出错误,不想再弄这题,结果突然发现,
变量的定义类型不对!!!
竟然坑在如此低级错误上。。一定别偷懒。。。。。
/*
*/
#include <stdio.h>
#include<string.h>
const int MAX=100010;
int cnt=0; //注意一定要全局变量,不要在主函数中重新定义。。
char a[MAX][30];
char b[MAX][90];
char es[30];
char* escape(char t[])
{
int i,j=0,len1=strlen(t);
for(i=0;i<30;i++)
es[i]=0;
for(i=1;i<len1-1;i++)
es[j++]=t[i];
return es;
}
void storage(char tmp[])
{
char tmp1[30],tmp2[90];
int i=0,j=0,len2=strlen(tmp);
while(tmp[i+1]!=']'){
tmp1[i]=tmp[i+1];
i++;
}
tmp1[i]=0;
strcpy(a[cnt],tmp1);
i=i+3;//i指向一行后半个串。
for(;i<len2;i++)
tmp2[j++]=tmp[i];
tmp2[j]=0;
strcpy(b[cnt],tmp2);
cnt++;
}
void query(char q[])
{
char tmp3[30];
int i;
if(q[0]=='['){
strcpy(tmp3,escape(q));
for(i=0;i<cnt;i++){
if(strcmp(tmp3,a[i])==0){
printf("%s\n",b[i]);
break;
}
}
if(i==cnt)
printf("what?\n");
}
else{
for(i=0;i<cnt;i++){
if(strcmp(q,b[i])==0){
printf("%s\n",a[i]);
break;
}
}
if(i==cnt)
printf("what?\n");
}
}
int main()
{
char str[130];
int i,num; //晕。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//freopen("G:\\in.txt","r",stdin);
while(gets(str)){
if(strcmp(str,"@END@")==0)
break;
storage(str);
}
scanf("%d",&num);
getchar(); //输入数字后要想输入字符串需要加个getchar()!!!
if(num==0)
return 0;
for(i=0;i<num;i++){
gets(str);
query(str);
}
return 0;
}