- 题目来源:《The C programming language》中的习题
- 练习1-20:编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方。
思路:
这里,我们首先要对制表符的概念和情况进行了解:制表符的作用是将光标移到最接近8的倍数的位置,使得后面的输出从此开始。换句话说,如果所有数据都紧跟在制表符后面输出,则这些数据只能从第9列、第17列、第25列......开始。
- 如果已经到了第1、2、3、...8列, 则直接跳到第9列。
- 如果已经到了第9、10、11、...16列, 则直接跳到第17列。
- 如果已经到了第17、18、19、...24列,则直接跳到第25列。
所以对于每一个位置的处使用制表符所需要填补的空格是不同的,计算公式如下:
nbs = (DETAB-pos%DETAB)%DETAB,其中pos为tab所处的位置。
C语言代码实现:
#include<stdio.h>#define DETAB 8
//将制表符替换为适当的空格,并且空格填充到下一个制表符终止位
void main(){
int c,pos,i,nbs;
pos = 1;
nbs = 0;
while((c=getchar())!=EOF){
if(c == ‘\t‘){
nbs = (DETAB-pos%DETAB)%DETAB+1;
i = 0;
for(;i<nbs;i++){
putchar(‘ ‘);
}
pos += nbs;
}else if(c == ‘\n‘){
putchar(c);
pos = 1;
nbs = 0;
}else{
pos++;
putchar(c);
}
}
}
时间: 2024-10-23 20:48:08