zoukankan      html  css  js  c++  java
  • 变位词实现 编程珠玑一处错误

    书中只实现了单词内部的排序而求得标记词,而并未实现单词之间的排序,所以运行结果按不符合作者预期结果,可能是作者的一个疏忽。

    完善后代码如下:

    #include <stdio.h>
    #include <string.h>
    #define WORD_MAX_LENGTH 100
    #define DICT_NUM 100

    char word[DICT_NUM][WORD_MAX_LENGTH], word_sign[DICT_NUM][WORD_MAX_LENGTH], old_word_sign[WORD_MAX_LENGTH];
    int count = 0;

    int char_cmp(char *x, char *y)
    {
    return *x - *y;
    }

    int str_compare(char *x, char *y )
    {
    return strcmp(x,y);
    }

    int sign_and_sort(char *input_file_name, char *output_file_name)
    {
    FILE *fp_input, *fp_output;
    int i = 0;
    if ((fp_input = fopen(input_file_name, "r")) == NULL || (fp_output = fopen(output_file_name, "w")) == NULL)
    {
    printf("cannot access the file!");
    exit(0);
    }

    while (fscanf(fp_input, "%s", word[count]) != EOF)
    {
    strcpy(word_sign[count], word[count]);
    qsort(word_sign[count], strlen(word_sign[count]),sizeof(char), char_cmp);
    strcat(word_sign[count], ": ");
    strcat(word_sign[count], word[count]);
    count++;
    }

    qsort(word_sign, count,sizeof(word_sign[count]), str_compare);
    for (i = 0;i < count; i++)
    fprintf(fp_output,"%s\n", word_sign[i]);

    fclose(fp_input);
    fclose(fp_output);
    return 0;
    }

    int squash(char *input_file_name, char *output_file_name)
    {
    FILE *fp_input, *fp_output;
    int linenumber = 0;
    count = 0;
    strcpy(old_word_sign, "");
    if ((fp_input = fopen(input_file_name, "r")) == NULL || (fp_output = fopen(output_file_name, "w")) == NULL)
    {
    printf("cannot access the file!");
    exit(0);
    }

    while (fscanf(fp_input, "%s %s", word_sign[count], word[count]) != EOF)
    {
    if (strcmp(old_word_sign, word_sign[count]) != 0 && linenumber > 0)
    fprintf(fp_output, "\n");
    strcpy(old_word_sign, word_sign[count]);
    linenumber++;
    fprintf(fp_output, "%s ", word[count++]);
    }

    fclose(fp_input);
    fclose(fp_output);
    return 0;
    }

    int main()
    {
    sign_and_sort("dict.txt", "mid.txt");
    squash("mid.txt", "result.txt");
    return 0;
    }

    运行过程及结果:



  • 相关阅读:
    android 蓝牙串口通讯使用简介
    【C】C语言可变参va_start/va_arg/va_end使用说明
    【Codecs】CABAC深入分析与理解
    【Bugs】VS单步调试的无法进入断点、行号错乱等问题解决方法
    【SVAC1】NAL单元的封装
    【CV】傅里叶描绘子原理及应用简介
    【CV】骨架提取
    【SVAC】千目聚云:SVAC2.0已来 未来发展道路一片光明
    【Debug】当前不会命中断点,源代码与原始版本不同
    【Base】POE供电
  • 原文地址:https://www.cnblogs.com/seebro/p/2375644.html
Copyright © 2011-2022 走看看