您的位置:首页 > 移动开发 > 微信开发

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

2014-12-06 12:39 99 查看
接上篇,今天的小程序:编写程序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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: