接上篇,今天的小程序:编写程序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; }
时间: 2024-11-05 06:09:42