将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方

 

#include <stdio.h>

#define  TABINC  8 //定义每个TABINC(8)个位置会出现一个制表位

int main()
{
    int c, nb, pos;

    nb = 0;    //到遇到制表符时,到达下个制表位需要的空格数
    pos = 1;   //程序在文本行的当前位置
   while((c = getchar()) != EOF)
   {
          if(c == '/t')
            {
                nb = TABINC - (pos - 1)%TABINC;
               while(nb > 0)
               {
                  putchar(' ');
                ++pos;
                  --nb;
              }
           }
       else if(c == '/n')
           {
             putchar(c);
            pos = 1;
          }
              else
              {
               putchar(c);
                ++pos;
              }
   }

 return 0;
}

      1,  理解题意:本题的目的是将输入的'/t'换成适当数目的空格输出。比如,输入:

                          ab/tcde/tas

                 pos:123456789,(pos为输入字符的位置,a--第一个输入的字符,c--第四个输入的字符)

                 输出:ab    cde         as,(b与c之间是6个空格,e与a之间是5个空格)

 

                 注:其实在终端输入的字符串和输出的样式是一样的,这里写成ab/tcde/tas,主要是为了直观

                       上好看,在终端输入时是不会出现上述字符串中的/t,因为这类转义字符时不可见,编译器

                       默认地用若干个空格代替/t。

 

      2,  TABINC:每隔8个位置就会出现一个制表位,pos为程序在文本行中的当前位置,nb为当遇到制表符时,

           程序计算出要到达下一个制表位所需要的空格数

 

      3,  将读入字符分成三类:'/t','/n',其他。分别进行处理。


nb  =  TABINC   -    (pos  -  1)  % TABINC ;

                           while  (nb   >   0){

                                    putchar ('    ');

                                    ++ pos;

                                    - - nb;

说一下这段代码,对于制表符来讲,如果用过的话你会发现,一个制表符在某些编辑软件里占8个字符的位置,而且制表符所在的位置都是八的整数倍,比如你输入123,此时光标在第四个位置。当在输入制表符的时候光标会停留在啊这一行的第九个位置上,也就是跳出了五个空格,如果你输入的是1234567890,光标在第11个位置上,再输入制表符,光标会停留在这个行第十七个位置上,即跳出了六个空格。(8的倍数)

TABINC   -    (pos  -  1)  % TABINC ;

tabinc就是制表符的宽度,设为8.pos是光标在这一行的位置,(pos-1)是上一个字符的位置。再和TABINC   求余是找到这一行中,最后几个不是8的整数倍内的字符个数,用TABINC-这几个字符就得到了应该填充空格的个数


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值