您的位置:首页 > 其它

poj 1035 串

2015-12-10 19:43 225 查看
直接来代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char dir[10005][20];
int num[56][10005];
int rr[56];
char word[56][20];
int dirnum=0;
int wordnum=0;
bool re(char *a,char *b)
{
int dif=0;
while(*a)
{
if(*(a++)!=*(b++))
{
dif++;
if(dif>1)
return false;
}
}
return true;
}
bool del(char *a,char *b)
{
int dif=0;
while(*a)
{
if(*a!=*b)
{
a++;
dif++;
if(dif>1)
return false;

}
else
{
a++;
b++;
}
}
return true;
}
bool inser(char *a,char *b)
{
int dif=0;
while(*b)
{
if(*a!=*b)
{
b++;
dif++;
if(dif>1)
return false;
}
else
{
a++;
b++;
}
}
return true;
}
int main()
{
memset(rr,0,sizeof(rr));
int i=0;
while(gets(dir[i]))
{
//printf("%s\n",dir[i]);
if(dir[i][0]=='#')
break;
dirnum=i;
i++;
}
i=0;
while(gets(word[i]))
{
if(word[i][0]=='#')
break;
wordnum=i;
i++;
}
memset(rr,0,sizeof(rr));
for(int i=0; i<=wordnum; i++)
{
for(int j=0; j<=dirnum; j++)
{
int l1=strlen(word[i]);
int l2=strlen(dir[j]);
if(abs(l1-l2)<=1)
{
if(l1==l2)
{
if(strcmp(word[i],dir[j])==0)
{
rr[i]=-1;
break;
}
else  if(re(word[i],dir[j]))
{
num[i][rr[i]++]=j;
}

}
if(l1==l2-1)
if(inser(word[i],dir[j]))
{
num[i][rr[i]++]=j;
}
if(l1==l2+1)
if(del(word[i],dir[j]))
{
num[i][rr[i]++]=j;
}
}
}
}
for(int i=0; i<=wordnum; i++)
{
if(rr[i]==-1)
{
printf("%s is correct\n",word[i]);
}
else
{
printf("%s:",word[i]);
for(int j=0; j<rr[i]; j++)
{
if(j<rr[i])
printf(" ");
int t=num[i][j];
printf("%s",dir[t]);

}
printf("\n");
}
}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: