我正在教自己C并通过K&R工作。我正在做练习1-21:
编写一个程序entab,用最小数量的制表符和空格替换空白字符串,以实现相同的间距。使用与detab相同的制表位。
我在练习这个练习时遇到了麻烦,所以我在网上找到了一个解决方案,但我不明白。有人可以解释这段代码的工作原理吗
#include<stdio.h>
#define TABINC 8
int main(void)
{
int nb,nt,pos,c;
nb = 0;
nt = 0;
for(pos=1;(c=getchar())!=EOF;++pos)
if( c == ' ')
{
if((pos % TABINC) != 0)
++nb;
else
{
nb = 0;
++nt;
}
}
else
{
for( ; nt > 0 ; --nt)
putchar('\t');
if( c == '\t')
nb = 0;
else
for( ; nb > 0; --nb)
putchar(' ');
putchar(c);
if(c == '\n')
pos = 0;
else if ( c == '\t')
pos = pos + ( TABINC - (pos -1) % TABINC) - 1;
}
return 0;
}
代码是
'\t'
的倍数位置遇到空格(
)时,即标签的大小,放置一个标签(TABINC
)。为了说明: - *中显示的空格 - 显示了一个标签
column: 1 2 3 4 5 6 7 8 9 10
input : * * * * h e l * * w
output: <tab>hel<tab>*w
在这个例子中,当在每个可被TABINC
整除的列位置遇到空格时,即4(在这种情况下),插入一个标签'\ t'。否则空间。
希望这会给你一些想法。