将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方
#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-这几个字符就得到了应该填充空格的个数
将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方相关推荐
- Mybatis 源码探究 (4) 将sql 语句中的#{id} 替换成 ‘?
Mybatis 源码探究 (4) 将sql 语句中的#{id} 替换成 '? 出于好奇,然后就有了这篇文章啦. 源码给我的感觉,是一座大山的感觉.曲曲折折的路很多,点进去就有可能出不来. 不过慢慢看下 ...
- IDEA中HTML标签替换成Thymeleaf标签
IDEA中HTML标签替换成Thymeleaf标签 一.简介 二.正则表达式基础 分组: 引用: 三.步骤 一.简介 本文主要介绍在IDEA中使用正则表达式将HTML模板中的标签替换成Thymelea ...
- R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串
R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录
- Linux从某个字符串处换行,Windows和Linux中任意字符串替换成换行符的问题
在Windows中经常碰到要把任意符号转换成回车符的问题,在Linux中这个问题很容易解决: \r 回车 \n 换行 Linux中\n表示一个新的行,Windows中\r\n表示一个新的行. sed ...
- js:将字符串中的逗号替换成空格
s.replace(/,/g," "); g(global 全局)指的是将s中所有的逗号都替换成空格 如若只需要替换第一个逗号,则s.replace(/,," " ...
- Excel如何批量将表中的0替换成空值?同时不能影响正常数字中包含的0
按Ctrl+F然后在弹出对话bai框选择"替换",在"查找"输入du 0,然后勾选zhi "匹配整个单元格内容"(Match entire ...
- java 将换行代替_Java批量将文件中的段落替换成空格,根据指定分隔符换行(SQL示例)...
我的需求是SQL文件中有成千的类似数据,我要将它们进行转换格式,如下图 第一步:将字符段楼替换,使用word排版 把数据拷贝到word中,使用特殊字符替换 点击全部替换,替换之后如下图,这时候它是一串 ...
- JS正则——将字符串中的逗号替换成空格
全局替换 s.replace(/,/g," ")替换第1个 s.replace(','," ")
- 将字符串中的换行替换成空
方法一 PHP_EOL就是其中的一个,代表php的换行符,这个变量会根据平台而变,在windows下会是/r/n,在linux下是/n,在mac下是/r (linux) $str = str_rep ...
最新文章
- Windows不同版本的解释
- pytorch test单张图片_PyTorch版EfficientDet比官方TF实现快25倍?这个GitHub项目数天狂揽千星...
- kali扫描内网ip_Metasploit路由转发实现内网渗透
- php怎样完成批量审核,CMS_DedeCMS 批量取消审核文档的实现方法,今天修改了几个地方的代码 实 - phpStudy...
- 父类与子类间的隐藏与重写
- Spring Boot加入websocket后,单元测试报错(javax.websocket.server.ServerContainer not available)
- Linux之虚拟机配置双网卡
- Web 爬虫 Apache Nutch 1.15 发布,支持 Java 10
- Android Binder 学习中几个问题
- 【实战技能】Google I/O 2022大会AI/ML给开发者的启发
- 后端实践:Nginx日志配置(超详细)
- 桌越科技关于程序员和软件开发
- 数据库设计的基本步骤
- 脱靶量与实际角度差计算
- 登陆qq出现计算机丢失msvcp140.dll,缺少msvcp140.dll怎么办?msvcp140.dll丢失解决方法...
- access查找出生日期年份_access中时间日期查询的一些总结
- 和平精英微信名片服务器繁忙,和平精英微信游戏名片是什么 微信游戏名片设置方法一览[多图]...
- 基于PHP+MySQL的旅游景点网站的设计与开发
- 厦门感恩回馈一线职工 为其开启“新年旅程”
- 案例:马斯洛需求层次理论——西游记的5人团队