wwx1005 2022-12-26 13:40 采纳率: 100%
浏览 256
已结题

单词匹配 c语言编程,求解

单词匹配
已知一个包含若干英文单词的词典(1≤n≤100),对任意输入的某一个单词 word(字典中的单词和给定单词 word 的长度均不超过 255),进行如下查询操作:
⑴ word 在词典中的位置。
⑵ 词典中仅有一个字符与 word 不匹配的单词位置。
⑶ 词典中比 word 多(或少)一个字符(除此字符外其余字符均匹配)的单词位置。
⑷ 上述查找时,如有多个单词符合条件,仅输出其第一个单词的位置。
【功能要求】
⑴ 词典以文本文件格式存放,每行一个单词。
⑵ 查找完成后,输出找到的单词在词典中的位置以及该单词,如未找到指定单词,应给出提示信息。

  • 写回答

9条回答 默认 最新

  • 赵4老师 2022-12-26 15:45
    关注
    
    //单词匹配
    //已知一个包含若干英文单词的词典(1≤n≤100),对任意输入的某一个单词 word(字典中的单词和给定单词 word 的长度均不超过 255),进行如下查询操作:
    //⑴ word 在词典中的位置。
    //⑵ 词典中仅有一个字符与 word 不匹配的单词位置。
    //⑶ 词典中比 word 多(或少)一个字符(除此字符外其余字符均匹配)的单词位置。
    //⑷ 上述查找时,如有多个单词符合条件,仅输出其第一个单词的位置。
    //【功能要求】
    //⑴ 词典以文本文件格式存放,每行一个单词。
    //⑵ 查找完成后,输出找到的单词在词典中的位置以及该单词,如未找到指定单词,应给出提示信息。
    #include <stdio.h>
    #include <string.h>
    int strdiff(char *a,char *b) {
        int la,lb,diff,i;
        la=strlen(a);
        lb=strlen(b);
        if (la<1 || lb<1 || la!=lb) return -1;
        diff=0;
        for (i=0;i<la;i++) if (a[i]!=b[i]) diff++;
        return diff;
    }
    int strnear(char *a,char *b) {
        int la,lb,near,i,j,k;
        la=strlen(a);
        lb=strlen(b);
        if (la<1 || lb<1 || !(la==lb+1 || la+1==lb)) return -1;
        near=0;
        if (la==lb+1) {
            for (i=0;i<la;i++) {
                k=0;
                for (j=0;j<lb;j++) {
                    if (k==i) {k++;j--;}
                    else {
                        if (a[k]!=b[j]) break;
                        k++;
                    }
                }
                if (j>=lb) return 1;
            }
        }
        if (la+1==lb) {
            for (i=0;i<lb;i++) {
                k=0;
                for (j=0;j<la;j++) {
                    if (k==i) {k++;j--;}
                    else {
                        if (b[k]!=a[j]) break;
                        k++;
                    }
                }
                if (j>=la) return 1;
            }
        }
        return 0;
    }
    int main() {
        FILE *f;
        int i,n;
        char ln[255+2];
        char d[100][255+1];
    
        f=fopen("dict.txt","r");
        if (NULL==f) {
            printf("Can not open dict.txt!\n");
            return 1;
        }
        i=0;
        while (1) {
            if (NULL==fgets(ln,255+2,f)) break;
            if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;
            strcpy(d[i],ln);
            i++;
            if (i>=100) break;
        }
        n=i;
        fclose(f);
    
        printf("dictionary:\n");
        for (i=0;i<n;i++) printf("%d %s\n",i+1,d[i]);
    
        printf("input a word:");
        fflush(stdout);
        fgets(ln,255+2,stdin);
        if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;
    
        //⑴ word 在词典中的位置。
        printf("find '%s' ...\n",ln);
        for (i=0;i<n;i++) if (0==strcmp(ln,d[i])) break;
        if (i<n) printf("%d %s\n",i+1,ln); else printf("Can not find '%s'!\n",ln);
    
        //⑵ 词典中仅有一个字符与 word 不匹配的单词位置。
        printf("find word only 1 char different from '%s' ...\n",ln);
        for (i=0;i<n;i++) if (1==strdiff(ln,d[i])) break;
        if (i<n) printf("%d %s\n",i+1,d[i]); else printf("Can not find word only 1 char different from '%s'!\n",ln);
    
        //⑶ 词典中比 word 多(或少)一个字符(除此字符外其余字符均匹配)的单词位置。
        printf("find word only 1 char more/less than '%s' ...\n",ln);
        for (i=0;i<n;i++) if (1==strnear(ln,d[i])) break;
        if (i<n) printf("%d %s\n",i+1,d[i]); else printf("Can not find word only 1 char more/less than '%s'!\n",ln);
    
        return 0;
    }
    //d:\test>test.exe
    //dictionary:
    //1 a
    //2 bb
    //3 ccc
    //4 dddd
    //input a word:a
    //find 'a' ...
    //1 a
    //find word only 1 char different from 'a' ...
    //Can not find word only 1 char different from 'a'!
    //find word only 1 char more/less than 'a' ...
    //Can not find word only 1 char more/less than 'a'!
    //
    //d:\test>test.exe
    //dictionary:
    //1 a
    //2 bb
    //3 ccc
    //4 dddd
    //input a word:ab
    //find 'ab' ...
    //Can not find 'ab'!
    //find word only 1 char different from 'ab' ...
    //2 bb
    //find word only 1 char more/less than 'ab' ...
    //1 a
    //
    //d:\test>
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊