《C程序设计语言》5-11 将
输入中的制表符替换成适当数目的空格。使他们接受一组作为参数的制表符停止位,如果程序不带参数,则使用默认的制表符停止位。
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 100
#define TAB 8
#define YES 1
#define NO 0
/*将输入中的制表符替换成适当数目的空格。
使他们接受一组作为参数的制表符停止位,如果程序不带参数,则使用默认的制表符停止位
*/
void settab(int argc, char *argv[], int tab[]);
void detab(int tab[]);
int main(int argc, char *argv[])
{
int tab[MAXLINE+1];
settab(argc, argv, tab);
detab(tab);
return 0;
}
//给tab数组初始化
void settab(int argc, char *argv[], int tab[])
{
int i = 1, pos = 0;
if(argc <= 1){//不带参数
for(; i <= MAXLINE; i++){
if(i % TAB == 0)
tab[i] = YES;
else
tab[i] = NO;
}
}
else{//有参数
for(i = 1; i <= MAXLINE; i++)
tab[i] = NO;
while(argc-- > 1){
pos = atoi(*++argv);
tab[pos] = YES;
}
}
}
void detab(int tab[])
{
int pos = 1;
char c;
while((c = getchar()) != EOF && pos <= MAXLINE){
if(c == '\t'){
while(tab[pos] != YES){
putchar(' ');
pos++;
}
//putchar(' ');
//pos++;
}
else if(c == '\n'){
putchar(c);
pos = 1;
}
else{
putchar(c);
pos++;
}
}
}