首页 > 代码库 > 【C语言】练习1-21

【C语言】练习1-21

  •  题目来源:《The C programming language》中的习题
  •  练习1-21:编写程序entab,将空格串替换为最好数量的制表符和空格,但要保持单词之间的间隔不变。

  思路: 

  对于制表符的作用我们已经在习题1-20中讲解了。

  这里的题目是用最少的制表符和空格代替空格。这里也分为以下几种情况:

  1. 字符为空格时,判断当前空格的位置,如果当前位置对8取余不为零,则nb++;如果当前位置对8取余等于零,ntab++,pos++,并且要把nb变为0;
  2. 字符为换行时,把变量清空,即nb=0,ntab=0,pos=0
  3. 字符为普通字符时,首先根据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;
            
        }
    }
}