#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. Mybatis 源码探究 (4) 将sql 语句中的#{id} 替换成 ‘?

    Mybatis 源码探究 (4) 将sql 语句中的#{id} 替换成 '? 出于好奇,然后就有了这篇文章啦. 源码给我的感觉,是一座大山的感觉.曲曲折折的路很多,点进去就有可能出不来. 不过慢慢看下 ...

  2. IDEA中HTML标签替换成Thymeleaf标签

    IDEA中HTML标签替换成Thymeleaf标签 一.简介 二.正则表达式基础 分组: 引用: 三.步骤 一.简介 本文主要介绍在IDEA中使用正则表达式将HTML模板中的标签替换成Thymelea ...

  3. R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串

    R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录

  4. Linux从某个字符串处换行,Windows和Linux中任意字符串替换成换行符的问题

    在Windows中经常碰到要把任意符号转换成回车符的问题,在Linux中这个问题很容易解决: \r 回车 \n 换行 Linux中\n表示一个新的行,Windows中\r\n表示一个新的行. sed ...

  5. js:将字符串中的逗号替换成空格

    s.replace(/,/g," "); g(global 全局)指的是将s中所有的逗号都替换成空格 如若只需要替换第一个逗号,则s.replace(/,," " ...

  6. Excel如何批量将表中的0替换成空值?同时不能影响正常数字中包含的0

    按Ctrl+F然后在弹出对话bai框选择"替换",在"查找"输入du 0,然后勾选zhi "匹配整个单元格内容"(Match entire ...

  7. java 将换行代替_Java批量将文件中的段落替换成空格,根据指定分隔符换行(SQL示例)...

    我的需求是SQL文件中有成千的类似数据,我要将它们进行转换格式,如下图 第一步:将字符段楼替换,使用word排版 把数据拷贝到word中,使用特殊字符替换 点击全部替换,替换之后如下图,这时候它是一串 ...

  8. JS正则——将字符串中的逗号替换成空格

    全局替换 s.replace(/,/g," ")替换第1个 s.replace(','," ")

  9. 将字符串中的换行替换成空

    方法一 PHP_EOL就是其中的一个,代表php的换行符,这个变量会根据平台而变,在windows下会是/r/n,在linux下是/n,在mac下是/r  (linux) $str = str_rep ...

最新文章

  1. Windows不同版本的解释
  2. pytorch test单张图片_PyTorch版EfficientDet比官方TF实现快25倍?这个GitHub项目数天狂揽千星...
  3. kali扫描内网ip_Metasploit路由转发实现内网渗透
  4. php怎样完成批量审核,CMS_DedeCMS 批量取消审核文档的实现方法,今天修改了几个地方的代码 实 - phpStudy...
  5. 父类与子类间的隐藏与重写
  6. Spring Boot加入websocket后,单元测试报错(javax.websocket.server.ServerContainer not available)
  7. Linux之虚拟机配置双网卡
  8. Web 爬虫 Apache Nutch 1.15 发布,支持 Java 10
  9. Android Binder 学习中几个问题
  10. 【实战技能】Google I/O 2022大会AI/ML给开发者的启发
  11. 后端实践:Nginx日志配置(超详细)
  12. 桌越科技关于程序员和软件开发
  13. 数据库设计的基本步骤
  14. 脱靶量与实际角度差计算
  15. 登陆qq出现计算机丢失msvcp140.dll,缺少msvcp140.dll怎么办?msvcp140.dll丢失解决方法...
  16. access查找出生日期年份_access中时间日期查询的一些总结
  17. 和平精英微信名片服务器繁忙,和平精英微信游戏名片是什么 微信游戏名片设置方法一览[多图]...
  18. 基于PHP+MySQL的旅游景点网站的设计与开发
  19. 厦门感恩回馈一线职工 为其开启“新年旅程”
  20. 案例:马斯洛需求层次理论——西游记的5人团队

热门文章

  1. 多媒体通信中内容分发网络技术分析
  2. C# 生成chart图表的三种方式
  3. 测试开发(社招):当当
  4. 2022-10-20 学习记录——节点边际电价
  5. 启动mysql报错:ERROR! The server quit without updating PID file
  6. 取得网络中SQL的服务器列表
  7. vue自定义动画 以及animation包在vue中的使用
  8. LDT,LDTR,GDT,GDTR,CS,DS,ES,TSS,TR操作系统常见寄存器
  9. Python练手小项目——随机加减法生成器
  10. poc-狮子鱼cms