【问题标题】:understanding entab example code in k&r理解 k&r 中的 entab 示例代码
【发布时间】:2014-10-16 02:05:42
【问题描述】:

我正在自学 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;
}

【问题讨论】:

  • 我不明白您为什么要跟踪位置。听起来整个事情都是空白的;对吗?
  • 我认为代码是正确的?
  • 究竟是什么不符合您的预期?你说了很多话,但没有提到到底是什么问题。
  • 我只是不明白为什么这段代码有效,希望有人能指导我完成它

标签: c tabs modulo kernighan-and-ritchie entab-detab


【解决方案1】:

代码是

  • 当在TABINC的倍数的位置遇到空格()时,放置一个制表符('\t'),即制表符的大小。

    李>
  • 遇到制表符时,会重置空格数。这是为了更喜欢一个标签到达一个制表位

为了说明: - *中显示的空格 - 一个标签显示在

column: 1 2 3 4 5 6 7 8 9 10
input : * * * * h e l * * w 
output:    <tab>hel<tab>*w  

在此示例中,当在每个列位置遇到可被TABINC 整除的空格时,即 4(在本例中),将插入一个制表符“\t”。否则空格。

希望这能给你一些想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2012-01-06
    • 2015-03-24
    相关资源
    最近更新 更多