【问题标题】:K&R Exercise 1-20 - Need some clarificationK&R 练习 1-20 - 需要一些说明
【发布时间】:2011-08-24 15:34:57
【问题描述】:

我不完全理解以下练习的要求:

“编写一个程序 detab,用适当数量的空格替换输入中的制表符到下一个制表位的空间。假设有一组固定的制表位,比如每 n 列。是变量还是符号参数?”

有人可以澄清一下粗体部分吗?

【问题讨论】:

  • n 8 做一个程序的第一个版本。然后为n 4 做另一个。而不是在命令行或其他一些配置方法上指定的n 的最后一个版本。

标签: c kernighan-and-ritchie


【解决方案1】:

本练习要求您通过添加正确数量的空格来模拟制表符的行为,以便输出仍然在制表位上对齐。

例如:

"hello\tworld"

应该变成:

"hello   world"

(制表符已替换为三个空格),如果制表位是每 4 列(即 n = 4)。

或者通过指出制表位的位置来澄清:

hello   world
^   ^   ^   ^

如果制表位是每 3 列,那么你应该得到:

hello world
^  ^  ^  ^

(制表符只替换为1个空格)

【讨论】:

  • 嗯,第一个制表位通常不与左边距相邻:_______^_______^_______^__...
  • @pmg 想一想左边距的第一个制表位并没有什么坏处,因为每个制表位都会插入至少一个空格字符,所以无论如何你都要越过它。我认为在位置 0 处包含制表位更清楚,因为它更适合其他模式。
  • @pmg :我承认它并不是真的有用(但也无害)。我已将它们删除以避免混淆 - 感谢您指出。
  • @sethobrien :这也是我的推理。我想我会让你们两个 cmets 的选票决定我是否应该把它们放回去。无论哪种方式,我都没有强烈的感觉。
  • 我确信我错了。第 0 列的选项卡是要走的路。 sethobrien 评论投票 :)
【解决方案2】:

如果您举一个将制表位设置为 n=8 的示例,例如,如果输入有 1 个字符,则制表符将添加 7 个空格(将您带到第 9 列)。基本上,不要总是添加 n 个空格,添加将您带到适当列的空格数以对应您的特定 n 值。

例如:

         1
1234567890123456789
1------>
123---->
More words----->

“假设一组固定的制表位”基本上适用于非程序员。我们习惯了一个标签总是对齐 4,8 等的倍数。但是在文字处理器中,制表位是可配置的……所以第一个制表符将使您在第 6 列上对齐,第二个制表符将转到 30(例如草率地居中文本),第三个制表符将为您提供第 70 列(用于页码或者其他的东西)。他只是在这里指定我们谈论的是“程序员”制表位,而不是文字处理器的制表位。

【讨论】:

  • 可能在谈论打字机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多