POJ1035
删除、替换、增加一个字母,使得输入单词能与字典中的单词相同,则输出该字典单词。
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
char dic[10001][16];
char ch[16];
int m;
void read()
{
while (cin >> dic[m])
{
if (dic[m][0] == '#')
break;
else
m++;
}
}
bool iscor(char* ch)
{
int i;
for (i = 0; i<m; i++)
if (strcmp(dic[i], ch) == 0)
return true;
return false;
}
void Replace(char *ch)
{
printf("%s:", ch);
int len1 = strlen(ch), len2;
int i, j, k, flag = 0;
for (i = 0; i<m; i++)
{
len2 = strlen(dic[i]);
if (len1 == len2 + 1)
{
flag = 0;
for (j = 0, k = 0; j<len1;)
if (ch[j] != dic[i][k])
j++, flag++;
else
j++, k++;
if (flag == 1)
printf(" %s", dic[i]);
}
if (len1 == len2)
{
flag = 0;
for (j = 0; j<len1; j++)
if (ch[j] != dic[i][j])
flag++;
if (flag == 1)
printf(" %s", dic[i]);
}
if (len1 + 1 == len2)
{
flag = 0;
for (j = 0, k = 0; k<len2;)
if (ch[j] != dic[i][k])
k++, flag++;
else
j++, k++;
if (flag == 1)
printf(" %s", dic[i]);
}
}
}
int main()
{
read();
while (cin >> ch&&ch[0] != '#')
{
if (iscor(ch))
printf("%s is correct\n", ch);
else
{
Replace(ch);
printf("\n");
}
}
return 0;
}