您的位置:首页 > 其它

POJ 1035 Spell checker

2013-04-30 10:52 381 查看
题目链接

兴奋,自己独立做的字符串的题目,1Y,哈哈。
#include<stdio.h>
#include<string.h>
typedef struct  Dic
{
    char word[20];
    int len;
} Dic;
char check[20];
Dic dic[10009];
int cmp1(int i)
{
    int j,k=0,flag=0;
    for(j=0; dic[i].word[j]!='\0'&&check[k]!='\0'; )
    {
        if(check[k]==dic[i].word[j])
        {
            k++;
            j++;
        }
        else
        {
            flag++;
            k++;
            if(flag>1)  return 0;
        }
    }
    if(flag==1)  return 1;
    else if(dic[i].word[j]=='\0'&&check[k]!='\0')   return 1;
    else return 0;
}
int cmp2(int i)
{
    int j,k=0,flag=0;
    for(j=0; check[j]!='\0'&&dic[i].word[k]!='\0';)
    {
        if(check[j]==dic[i].word[k])
        {
            j++;
            k++;
        }
        else
        {
            flag++;
            k++;
            if(flag>1)  return 0;
        }
    }
    if(flag==1)
        return 1;
    else if(check[j]=='\0'&&dic[i].word[k]!='\0')
    return 1;
    return 0;
}
int cmp3(int i)
{
    int j,k,flag=0;
    for(j=0,k=0;check[j]!='\0';j++,k++)
    {
        if(check[j]!=dic[i].word[k])
        flag++;
        if(flag>1)
        return 0;
    }
    return 1;
}
int main()
{
    /*freopen("in.txt","r",stdin);*/
    int count=0,lenn,i,flag;
    while(1)
    {
        scanf("%s\n",dic[count].word);
        if(strcmp(dic[count].word,"#")==0)
            break;
        dic[count].len=strlen(dic[count].word);
        count++;
    }
    while(1)
    {
        scanf("%s\n",check);
        flag=0;
        if(strcmp(check,"#")==0)
            break;
        lenn=strlen(check);
        for(i=0; i<count; i++)
        {
            if(dic[i].len==lenn&&strcmp(dic[i].word,check)==0)
            {
                flag=1;
                printf("%s is correct\n",check);
                break;
            }
        }
        if(flag==1)   continue;
        printf("%s: ",check);
        for(i=0; i<count; i++)
        {
            if(dic[i].len+1==lenn)
            {
                if(cmp1(i))
                {
                    flag++;
                    if(flag==1)
                        printf("%s",dic[i].word);
                    else   printf(" %s",dic[i].word);
                }
            }
            else if(dic[i].len-1==lenn)
            {
                if(cmp2(i))
                {
                    flag++;
                    if(flag==1)
                        printf("%s",dic[i].word);
                    else   printf(" %s",dic[i].word);
                }
            }
            else if(dic[i].len==lenn)
            {
                if(cmp3(i))
                {
                    flag++;
                    if(flag==1)
                        printf("%s",dic[i].word);
                    else   printf(" %s",dic[i].word);
                }
            }
        }
        putchar('\n');
    }
    return 0;
}
写的比较麻烦,分2大种情况,一种是可以在字典中找到相同的,第二种是找不到相同的,第二种又可以分3 种情况,1,相同的长度,只有一个字母不同;2,字典中的单词比要查的多一个字母,其余的都相同‘;3,要查的单词比字典中的单词多一个字母,其余的都相同。主要是这3种情况的判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: