您的位置:首页 > 其它

POJ 1035 Spell checker

2017-07-20 13:35 513 查看

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;//flag为标记
for (i = 0; i<m; i++)
{
len2 = strlen(dic[i]);
if (len1 == len2 + 1)//deleting
{
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)//replace
{
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)//adding
{
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: