顺序表

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 10005
typedef struct node
{
    char a[16];
    int len;
}node;
node te,t[MAX];
int n=0;

void pp(node T)
{
    int N[10005];
    int p=0;
    int i,j,k;
    int now;
    for(now=0;now<n;now++)//从now节点开始匹配
    {
        //模糊匹配
        int count=0;
        if(t[now].len==T.len)
        {
            for(i=0;i<T.len;i++)
            {
                if(t[now].a[i]!=T.a[i])
                    count++;
                if(count>1)
                    break;
            }
            if(count==0)
            {
                printf("%s is correct\n",T.a);
                return;
            }
        }
        else if(t[now].len==T.len+1)//字典比带匹配串长
        {
            for(j=0,k=0;j<t[now].len;j++,k++)
            {
                if(T.a[j]!=t[now].a[k])
                {
                    j--;
                    count++;
                    if(count>1)
                        break;
                }
            }
        }
        else if(t[now].len==T.len-1)//字典比待匹配串短
        {
            for(j=0,k=0;j<T.len;j++,k++)
            {
                if(t[now].a[j]!=T.a[k])
                {
                    j--;
                    count++;
                    if(count>1)
                        break;
                }
            }
        }
        if(count==1)
        N[p++]=now;//记录字典的位置
    }
    printf("%s:",T.a);
    for(j=0;j<p;j++)
        printf(" %s",t[N[j]].a);
    printf("\n");
}

int main()
{
    while(~scanf("%s",t[n].a))
    {
        if(t[n].a[0]=='#')
            break;
        t[n].len=strlen(t[n].a);
        n++;
    }
    while(~scanf("%s",te.a))
    {
        if(te.a[0]=='#')
            break;
        te.len=strlen(te.a);
        pp(te);
    }
    return 0;
}

 

posted @ 2021-06-21 11:23  Mr-Yao  阅读(41)  评论(0编辑  收藏  举报