当前位置: 代码迷 >> 综合 >> POJ-1035-Spell checker
  详细解决方案

POJ-1035-Spell checker

热度:98   发布时间:2023-12-19 11:49:12.0

对与这道题感觉挺麻烦的,一不注意就容易WA,不过这次竟然1A了,很诧异。

这道题目主要就是字符串的处理,我从中还巩固了函数的调用,发现自己的函数调用越来越熟练了。

做法就是一个个字符串处理函数的调用,细心点,还是很简单的。

#include<stdio.h>

#include<string.h>
int nn;
struct list
{
    char str[51];
}s[10000];//建立一个结构体存储字典
int change(char *x,char *y)
{
    int leap=0,n,i;
    n=strlen(x);
    for(i=0;i<n;i++)
    {
        if(x[i]!=y[i])
        leap++;
        if(leap>1)
        break;
    }
    if(i==n)return 1;
    else
    return 0;

}//这个函数是判断更改一个字母的
int shao(char *x,char *y)
{
    int n,i,j;
    n=strlen(x);
    for(i=0,j=0;i<n;j++,i++)
    {
        if(x[i]!=y[j])
        {
            j--;
        }
        if((i-j)>1)
        break;
    }
    if(i==n)return 1;
    else return 0;
}//这个函数是判断少一个,或者多一个字母的
int choose(char *x,char*y)
{
    int n1,n2,n;
    n1=strlen(x);
    n2=strlen(y);
    n=(n1>n2)?n1-n2:n2-n1;
    if(n>1)
    return 0;
    else
    {
        if(n==0)
        {
            if(change(x,y))
            return 1;
            else
            return 0;
        }
        else
        {
            if(n1>n2)
            {
                if(shao(x,y))
                return 1;
                else
                return 0;
            }
            else
            {
                if(shao(y,x))
                return 1;
                else
                return 0;
            }
        }
    }
}
void pan(char *x)
{
    int i;
    for(i=0;i<nn;i++)
    {
        if((strcmp(x,s[i].str)==0))
        {
            printf("%s is correct\n",x);
            break;
        }
    }
    if(i==nn)
    {
        printf("%s:",x);
        for(i=0;i<nn;i++)
        {
            if(choose(x,s[i].str))
            {
                printf(" %s",s[i].str);
            }
        }
        printf("\n");
    }

}
int main()
{
    int i,leap;
    char str[51];
    leap=1;
    for(i=0;i>=0;i++)
    {
        gets(s[i].str);
        if(s[i].str[0]=='#')
        break;
    }
    nn=i;
    for(i=0;i>=0;i++)
    {
        gets(str);
        if(str[0]=='#')
        break;
        else
        {
            pan(str);
        }
    }
    return 0;

}