在“编程珍珠”中:珍珠串,section 15.3 (Generating Text),作者介绍了如何从一个输入文档中生成随机文本。在source code ,有些东西我不明白。
for (i = 0; i < k; i++)
word[nword][i] = 0;
作者解释说:“读取输入后,我们追加 k 个空字符(因此比较函数不会跑到最后)。”这个解释真的让我很困惑,因为在评论这两行之后它仍然有效。为什么这是必要的?
最佳答案
这样做可以减少您在进行逐个字符比较时必须处理的奇怪情况的数量。
alphabet
alpha___
如果您一次通过一个字母,而 alpha
末尾的空填充不存在,您将尝试检查下一个元素...然后正确运行离开数组的末尾。
空填充基本上确保当一个单词中有一个字符时,另一个单词中有一个对应的字符。由于空字符的值为 0,因此较短的单词总是会被视为“小于”较长的单词!
至于为什么没有这些线它似乎也能工作,我能想到两个相关的原因:
- 这是用 C 写的。C 不保护它的数组边界;您可以读取超出为其分配的空间的任何垃圾数据,而且您永远听不到任何声音。
- 您的输入文档是这样制作的,您永远不会比较两个字符串,其中一个是另一个的前缀(就像
alpha
是alphabet
)。
关于c - 为什么这个例子在字符串比较中使用空填充? “Programming Pearls” : Strings of Pearls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13245050/