码迷,mamicode.com
首页 > 编程语言 > 详细

【C语言】练习1-21

时间:2014-06-08 00:35:43      阅读:720      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

  •  题目来源:《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语言代码实现:

bubuko.com,布布扣
#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;
            
        }
    }
}
bubuko.com,布布扣

【C语言】练习1-21,布布扣,bubuko.com

【C语言】练习1-21

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/ningvsban/p/3774539.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!