我自学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;
}
答案 0 :(得分:0)
代码是
在'\t'
的倍数位置(即标签的大小)处遇到空格()时,放置一个标签(
TABINC
)。
遇到标签时,会重置空格数。这是为了更喜欢标签到达tabstop
说明: - *中显示的空格 - 标签显示在
中column: 1 2 3 4 5 6 7 8 9 10
input : * * * * h e l * * w
output: <tab>hel<tab>*w
在这个例子中,当在TABINC
整数的每个列位置遇到一个空格,即4(在这种情况下),一个标签&#39; \ t&#39;插入。否则就是空间。
希望这会给你一些想法。