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

单词匹配 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 Mac虚拟机安装Windows,Windows中用idea跑项目,报错process finished with exit code -1073741819(0xc0000005) 如何解决?
  • ¥15 关于python爬虫返回js数据结构的处理
  • ¥15 ubuntu所用stm32标准库开发烧录没反映
  • ¥15 运维工程师(在职人员回答)
  • ¥15 Kmeans的趋势分析有会的吗
  • ¥20 R语言单细胞测序 对seurat对象进行标准化时出现问题
  • ¥15 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。
  • ¥15 求一个stm32串口控制程序
  • ¥20 Windows 驱动开发版本疑问相关