POJ 1035 Spell checker

来源:互联网 发布:淘宝双11红包攻略活动 编辑:程序博客网 时间:2024/06/17 02:51

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;}
原创粉丝点击