C 我试图理解K&R的练习1-21

C 我试图理解K&R的练习1-21,c,kernighan-and-ritchie,C,Kernighan And Ritchie,这是我试图理解的问题: 编写一个程序“entab”,用最小值替换空白字符串 达到相同间距的制表符和空白的数量。当 制表符或单个空白将足以达到制表位,而制表位应 有优先权吗 解读问题: a。这是一个在输入中插入“制表符”的程序 b。如果字符串由连续的空格组成,则这些空格 必须用最少数量的选项卡和空格替换空格 在以下输入中,程序应如何运行: 哎***** ******嗨 嗨,你好! 嗨! 你好,你好吗? 嗨**嗨! 确定最小选项卡数量以及最小选项卡和空间组合的标准是什么 对于制表符,*,对于空格,T

这是我试图理解的问题:

编写一个程序“entab”,用最小值替换空白字符串 达到相同间距的制表符和空白的数量。当 制表符或单个空白将足以达到制表位,而制表位应 有优先权吗

解读问题:

a。这是一个在输入中插入“制表符”的程序

b。如果字符串由连续的空格组成,则这些空格 必须用最少数量的选项卡和空格替换空格

在以下输入中,程序应如何运行:

哎***** ******嗨 嗨,你好! 嗨! 你好,你好吗? 嗨**嗨! 确定最小选项卡数量以及最小选项卡和空间组合的标准是什么

对于制表符,*,对于空格,TABSTOP=8

这句话的意思是:当一个制表符或一个空格足以到达制表位时

注:我已经阅读了这个重复问题的答案,但我
不要认为它们有用。

链接的可能重复的问题集中在正确地做算术上。我猜你的问题比这更原始:你不知道什么是制表位

当K&R写练习时,他们希望读者有打字机的经验,这就是制表符的来源。tab键使托架滑到下一个停止点的位置,这是一个真实的物理现象,实际上阻止了托架进一步移动,直到按下另一个键。后来的打字机越来越像计算机,用编程的停止位置代替了物理停止

制表符的用途是制表。在分隔表格列的水平位置设置制表位,然后在每个值后按tab键输入表格。例如,如果要键入此表:

Character         ASCII
Tab               9
Linefeed          10
Carriage Return   13
Space             32
如果不使用制表符,我必须在单词制表符后多次键入空格,而不是在换行后多次键入空格,并且在回车后只键入几次空格。但是,如果我在第二列开始的位置设置制表位,它会变得更容易。我在单词tab之后按tab键一次,回车键前进到9的正确位置,在单词Linefeed之后按tab键一次,回车键前进到10的正确位置,等等。如果我需要第三列,我会在第二列的右侧设置另一个制表位

您可以在文本编辑器中体验到这一点,它不是一个为tab键分配各种不相关函数的奇特IDE,而是一个普通的IDE,比如vi,甚至是一个终端仿真器,运行一个不执行任何操作的程序cat>/dev/null。键入几行不同长度的单词,每行后面都有一个制表符,然后观察它们是如何排列的,以及当其中一个单词的长度足以占据表中的两列时会发生什么情况。继续玩它,直到你对tab角色的功能有了直观的理解

现代文本编辑器和终端模拟器通常每8个字符设置一个制表位。这就是tabstop=8的意思。停止点位于第8、16、24、32列,…,或者如果您认为最左边的列是1而不是0,则位于第9、17、25、33列,。。。制表位实际上在vt100 ish终端上是可编程的,但这是一个很少使用的功能

返回文本编辑器,在新行的开头键入1 2 Tab 3 4。12和34之间用制表符组成的空格隔开。然后再开始另一行,在制表符前面用空格键入相同的内容:1 2空格制表符3 4。第二行看起来与第一行完全相同,但这次12到34之间的空白由空格和制表符组成。在不使用任何制表符的情况下,通过键入空格直到其对齐,生成第三行外观相同

这三行是练习1-21程序可能输入的示例。第一个选项只有一个制表符,没有空格,它使用的字符数最少,因此这就是您希望为所有3个输入输出的字符数


如果您需要帮助了解输出制表符和空格的一般公式,请参阅其他问题。这里有一个粗略的描述,留下一些细节供您思考:当您阅读输入时,跟踪您所在的列。当你到达一个空格或制表符时,读到空格和制表符序列的末尾,记住序列开始时你在哪一列。在序列的末尾,您知道光标所在的列以及要将光标移动到的列,并且必须计算空格和制表符的最佳序列以进行移动。

@Broman:您确定吗?are后面的5个空格可以替换为一个选项卡。你身后的空间也不需要;后面的标签会到达相同的位置。@JonathanLeffler你说得对。我错了。在这里引用时请多加小心。我编辑了这个问题
n从非引号中删除引号格式,并将引号格式添加到引号中。错误的回答会使问题变得混乱,并可能吸引反对票。请注意,对“没有帮助”的解释不足以解释为什么建议的副本不是副本。对我来说,它仍然像是一个复制品。