您的位置:首页 > 其它

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

2011-04-22 18:19 330 查看
源自《The C Programming Language》P25 pr1-20:

编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。假设

制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该是变量还是常量呢?

参考代码:

main.c

#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',其他。分别进行处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐