首页 > 代码库 > 避免老年痴呆,每日一个小程序(二)

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

接上篇,今天的小程序:编写程序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;}

 

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