gpt4 book ai didi

c - 基于字符串比较的单词翻译程序不能正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:41 24 4
gpt4 key购买 nike

我制作了一个程序,它从文件 english_dictionary.txt 中读取 100 个最常用的英语单词,然后在 foreign_dictionary.txt 中我将这些单词的翻译放入相应的外语单词。

.txt文件的内容放在两个char *array [100]中。

然后程序从文件 text_to_translate.txt 中读取包含英文文本的文件,如果找到匹配项,则将英文字符串(单词)替换为外国字符串。但它不起作用,谁能告诉我为什么?

下面是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void){

char *foreign[100];
int i;

FILE *fp = fopen("foreign_dictionary.txt", "r");

for (i = 0; i < 100; ++i){
foreign[i] = malloc(15 * sizeof(char));
fgets(foreign[i], 20, fp);
}
fclose(fp);

char *english[100];

fp = fopen("english_dictionary.txt", "r");

for (i = 0; i < 100; ++i){
english[i] = malloc(15 * sizeof(char));
fgets(english[i], 20, fp);
}
fclose(fp);
//------------------------if find a match and print the translation--------
char *buffer = malloc(15 * sizeof(char));
int flag = 0;
fp = fopen("text_to_translate.txt", "r");
while (fgets(buffer, 20, fp) != NULL){
for (i = 0; i < 100; ++i)
if (english[i] == buffer){
printf("%s", foreign[i]);
flag = 1;
}
if (flag == 1)
continue;
else
printf("%s", buffer);
}

return 0;
}

附言如果需要,字典文件是这样制作的:

the
and
to
of
.
.
.

最佳答案

  • 首先在您的代码中,您正在做

    english[i] == buffer

    比较字符串,但不能使用 == 运算符比较字符串。您需要使用 strcmp()相反。

  • 第二 , fgets()读取并存储结尾的 newline。手动去除它们总是更好,大多数时候它们会导致字符串比较失败。

  • 最后您将15 字节分配给您提供给fgets() 的缓冲区,同时最大读数fgets() 的限制为 19(比提供的少 1)。这可以创建 undefined behaviour如果输入超过 14 个 char,则缓冲区溢出。此外,sizeof(char) 保证在 C 中生成 1。你可以放弃那部分。


忠告:关于这个程序的设计,我感觉又多了一个bug。您永远不会检查 fgets() 是否成功,只是无条件地读取文件 100 次,然后使用这些值。这会产生两个问题。

  1. 一些内容可以有效地变成NULL。因此,稍后在使用这些值时,您将再次面临 UB。
  2. 如果您使用固定大小循环固定次数的迭代,恕我直言,没有使用动态内存分配的要求

稍微改变一下你的方法,比如

  • 创建一个足够长的临时缓冲区数组。
  • 使用 fgets()
  • 读取该临时数组的输入
  • 检查 fgets() 是否成功(非 NULL 返回值)

    • 如果不是NULL

      • 去掉最后一个换行符
      • 的输入
      • 计算容纳字符串所需的长度
      • 为指针数组分配动态内存
      • 复制输入
    • 如果 NULL

      • 它指的是文件结尾,没有更多内容可读,因此您可以退出循环以读取该特定文件的输入。

关于c - 基于字符串比较的单词翻译程序不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com