【C语言】练习1-21
- 题目来源:《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; } } }