- 题目来源:《The C programming language》中的习题
- 练习1-21:编写程序entab,将空格串替换为最好数量的制表符和空格,但要保持单词之间的间隔不变。
思路:
对于制表符的作用我们已经在习题1-20中讲解了。
这里的题目是用最少的制表符和空格代替空格。这里也分为以下几种情况:
- 字符为空格时,判断当前空格的位置,如果当前位置对8取余不为零,则nb++;如果当前位置对8取余等于零,ntab++,pos++,并且要把nb变为0;
- 字符为换行时,把变量清空,即nb=0,ntab=0,pos=0
- 字符为普通字符时,首先根据ntab的值for循环输出\t;同样根据nb的值循环输出空格。然后判断当前字符若为\t,则位置pos=pos+(ENTAB-pos%ENTAB)%ENTAB+1;否则令pos++。之后令nb为零。并输出当前字符。
C语言代码实现:
#include<stdio.h>#define ENTAB 8
void main(){
int c,nb,ntab,i,j,pos;
nb = 0;
ntab = 0;
i = 0;
j = 0;
pos = 1;
while((c=getchar()) != EOF){
if(c == ‘ ‘){
if(pos%ENTAB != 0){
nb++;
}else{
ntab++;
nb = 0;
}
pos++;
}else if(c == ‘\n‘){
nb = 0;
ntab = 0;
i=0;
j=0;
pos = 1;
putchar(c);
}else{
for(;i<ntab;i++){
putchar(‘\t‘);
}
for(;j<nb;j++){
putchar(‘ ‘);
}
if(c == ‘\t‘){
pos += (ENTAB-pos%ENTAB)%ENTAB+1;
}else{
pos++;
}
putchar(c);
nb = 0;
ntab = 0;
i = 0;
j = 0;}
}
}