gpt4 book ai didi

c - Stdin + 字典文本替换工具 -- 调试

转载 作者:行者123 更新时间:2023-12-05 06:51:46 25 4
gpt4 key购买 nike

我正在从事一个项目,其中有两个主要文件。本质上,该程序读取一个文本文件,该文件定义了一个具有键值映射的字典。每个键都有一个唯一的值,文件的格式如下所示,其中每个键值对都在其自己的行上:

ipsum i%#@!
fubar fubar
IpSum XXXXX24
Ipsum YYYYY211

然后程序从 stdin 读取输入,如果任何“单词”与字典文件中的键匹配,它们将被替换为值。大写和小写有点区别——这是“匹配优先级”的顺序

  1. 确切的单词在替换集中
  2. 除了第一个字符以外的所有字符都转换为小写的单词在替换集中
  3. 完全转换为小写的单词在替换集中

意思是如果确切的词在字典中,它就会被替换,但如果不存在,则检查下一个可能性 (2),依此类推...

我的程序通过了我们提供的基本案例,但随后终端显示输出与引用二进制文件不同。

我进入了两个文件(不是 c 文件,而是二进制文件),一个超长,有很多数字,另一个只有一行随机字符。所以这并没有真正的帮助。我还检查了我的代码并进行了一些小测试,但似乎没问题?一位 friend 建议我确保我正在考虑 processInput() 中的 null 运算符,而我已经这样做了(或者至少我是这么认为的,如果我错了请纠正我)。我还将 getchar() 转换为 int 以正确检查 EOF,并为 char 数组分配了额外的空间。我还尝试了 vimdiff 并且变得更加困惑。请帮我调试一下!我整天都在做这件事,我很困惑。

最佳答案

processInput() 中存在多个问题功能:

  • 当字节读取为 0 时循环不应该停止,您应该处理完整的输入:

      while ((ch = getchar()) != EOF)
  • EOF 的测试实际上应该以不同的方式完成,以便文件的最后一个单词在恰好出现在文件末尾时有机会被处理。

  • isalnum((char)ch) 中的 Actor 不正确:你应该通过 ch直接到isalnum .类型转换为 char实际上适得其反,因为它会使字节值超出 CHAR_MAX为负值 isalnum()具有未定义的行为。

  • 测试 if(ind >= cap)太松了:如果word包含 cap字符,将空终止符设置为 word[ind]将写入超出数组的末尾。将测试更改为 if (cap - ind < 2)始终允许一个字节和一个空终止符。

  • 你应该检查单词中至少有一个字符以避免调用 checkData()带有一个空字符串。

  • char key[ind + 1];没用:你可以通过 wordcheckData() .

  • checkData(key, ind)不正确:您应该为大小写转换传递缓冲区的大小,至少为 ind + 1允许空终止符。

  • putchar((char)ch); 中的 Actor 是无用且令人困惑的。

其余代码中存在一些小问题,但不会引起问题。

关于c - Stdin + 字典文本替换工具 -- 调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66083526/

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