C 理解K&;中的detab;R
我在自学C和K&R。我在做练习1-20: 编写一个程序entab,用最少的制表符和空格数替换空格串,以获得相同的间距。使用与detab相同的制表位 我自己完成了这个项目,但正在回顾其他解决方案:C 理解K&;中的detab;R,c,tabs,modulo,kernighan-and-ritchie,entab-detab,C,Tabs,Modulo,Kernighan And Ritchie,Entab Detab,我在自学C和K&R。我在做练习1-20: 编写一个程序entab,用最少的制表符和空格数替换空格串,以获得相同的间距。使用与detab相同的制表位 我自己完成了这个项目,但正在回顾其他解决方案: #include<stdio.h> #define TABINC 8 int main(void) { int nb,pos,c; nb = 0; pos = 1; while((c=getchar())!=EOF) { if( c == '\t')
#include<stdio.h>
#define TABINC 8
int main(void)
{
int nb,pos,c;
nb = 0;
pos = 1;
while((c=getchar())!=EOF)
{
if( c == '\t')
{
nb = TABINC - (( pos - 1) % TABINC); // <---- How does this work
while( nb > 0)
{
putchar('#');
++pos;
--nb;
}
}
else if( c == '\n')
{
putchar(c);
pos = 1;
}
else
{
putchar(c);
++pos;
}
}
return 0;
}
#包括
#定义TAB8
内部主(空)
{
国际nb,pos,c;
nb=0;
pos=1;
而((c=getchar())!=EOF)
{
如果(c=='\t')
{
nb=TABINC-((位置-1)%TABINC);//0)
{
putchar(“#”);
++pos;
--铌;
}
}
else如果(c=='\n')
{
普查尔(c);
pos=1;
}
其他的
{
普查尔(c);
++pos;
}
}
返回0;
}
我很难理解这部分是如何工作的nb=TABINC-((pos-1)%TABINC)代码>。有人能一步一步地解释一下这到底在做什么吗?也许可以给我举个例子
谢谢。考虑以下输入文本:
\tone\ntwo\tthree\nsixteen\tseventeen\teighteen\n
这就是我们希望它产生的结果(选项卡被替换为·····
):
每个制表符字符所需的空格数始终为1到TABINC
(即8)之间的数字。上例中的选项卡展开如下:
nb = 8 - n
当前下一个选项卡编号空格
列#所需位置
1 9 8
4 9 5
8 9 1
18 25 7
你应该可以在这里看到一个模式。如果已经处于制表符位置(1、9、17等),则需要添加8个空格。一般来说,如果我们是n
个字符,超过一个制表符位置(其中0
n = (pos - 1) % 8
nb = 8 - n
nb = 8 - ((pos - 1) % 8)
nb = TABINC - ((pos - 1) % TABINC)