【问题标题】:K&R: Define Line of Input - Understanding the Basics of Char ArrayK&R:定义输入行 - 了解字符数组的基础知识
【发布时间】:2023-03-24 02:29:01
【问题描述】:

K&R(第 2 版,ANSI C)中的练习 1-18 要求读者:

编写一个程序来删除每行输入的尾随空格和制表符,并删除整个空白行。

我向社区提出的问题是,有人可以澄清一下“输入行”是指包含制表符和空白字符的输入,还是仅包含制表符和空白字符的输入行。

向经验丰富的开发人员寻求帮助,他们可以帮助我了解我是否过度考虑了这一点,或者是否有更简单的解决方案来解决这两个问题。

【问题讨论】:

  • 这里的关键词是“尾随”——意思是以空格和制表符结尾的行。例如"Hello world ""Hello world"。但第二部分意味着删除只有制表符和空格的行。
  • “输入行”的意思就是——fgets 或等效返回的任何字符串。您不能对其包含的内容做出任何假设。它可以包含制表符、空格和其他字符的任意组合。所有制表符和空白当然是可能的,您需要正确处理它(不输出它)。
  • 一行输入是任何字符序列,后跟一个换行符'\n'。读取一行输入的典型方法是使用fgets。然而,在那次练习之前的几页,这本书实现了一个名为getline 的函数,它从标准输入读取一行。
  • 谢谢@user3386109、Nate 和 Johnny。感谢您的时间,并帮助我解决我的误解。

标签: arrays c kernighan-and-ritchie


【解决方案1】:

一行输入是以'\n'字符结尾的字符序列。 在这种情况下,我假设空行是指空格和制表符的任意组合,后跟换行符。 解决这个问题的一个想法是拥有状态,并且只有在您知道同一行中有更多非空格字符时才将一系列制表符和空格传递给输出(使用 printf 和 putchar 等函数)。 祝你学习顺利!

【讨论】:

    【解决方案2】:

    请说明“输入行”是指包含制表符和空白字符的输入,还是仅包含制表符和空白字符的输入行。

    C 库将 line 定义为

    文本流是组成的有序字符序列,每行由零个或多个字符加上一个终止换行符组成。最后一行是否需要终止换行符是实现定义的。

    因此,输入行所有字符,直至'\n'。该行以'\n'文件结尾 结束。因此,它的长度为 0 或更大,并带有可能的尾随 '\n'


    使用fgets() 读取的输入并保存为字符串

    处理字符串,也许从末尾开始,寻找制表符和空格。

    【讨论】:

      猜你喜欢
      • 2012-07-12
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多