码迷,mamicode.com
首页 > 其他好文 > 详细

避免老年痴呆,每日一个小程序(二)

时间:2014-12-06 14:01:36      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   使用   sp   for   on   

接上篇,今天的小程序:编写程序detab,将输入中的制表符替换成适当数目的空白符(使空白充满到下一制表符停止位)。假定制表符停止位的位置是固定的,比如在每个n列的位置上。n应为变量或符号参数吗?--为避免空格与tab显示难以区分,这里使用指定长度的‘*’号填充tab符号。

#include <stdio.h>
/*将输入的制表符替换为适当数量的‘*’ */
#define N 4  //制表符的停止位
#define MAXLENGTH 1000 //输入行最大长度
int getLine(char s[],int lim);
void convertTab(char s[]);
main(){
    char line[MAXLENGTH];
    int len = 0;
    while((len = getLine(line,MAXLENGTH)) > 0){
        convertTab(line);
        printf("%s",line);
    }
    return 0;
}
int getLine(char s[],int lim){
    int c,i;
    for(i = 0; i < (lim -1) && (c = getchar()) != EOF && c != \n; ++i){
        s[i] = c;    
    }
    if(c == \n){
        s[i] = c;
        ++i;
    }
    s[i] = \0;
    return i;
}

void convertTab(char s[]){
    int i,j,k,c;
    int len;   //替换tab后的当前字符串长度
    char d[MAXLENGTH]; //用于存放替换后的字符串 
    for(i = 0,j = 0; (c = s[i]) != \0;++i){
        if(c == \t){
            len = j;
            for(k = 0;k < (N - len % N);++k){
                d[j] = *;
                ++j;
            }
        }
        else{
            d[j] = c;
            ++j;
        }
    }
    d[j] = \0;
    
    for(i = 0; i <= j; ++i)
        s[i] = d[i];
    
    return;
}

 

避免老年痴呆,每日一个小程序(二)

标签:style   blog   io   ar   color   使用   sp   for   on   

原文地址:http://www.cnblogs.com/cdskycom/p/4148125.html

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