《C程序设计语言》1-21
#include <stdio.h>
void entab(int argc, char *argv[]);
int main(int argc, char *argv[])
{
entab(argc, argv);
return 0;
}
/*将空格串替换为最少数量的制表符和空格*/
void entab(int argc, char *argv[])
{
int pos = 1;//用来存储当前位置
int sp = 0, tn = 0;//用来存在空格串的空格数,制表符数
int tab = 0;//用来存储制表符停止位
char c;
tab = (argc == 1)? TAB: (*argv[1] - '0');
while((c = getchar()) != EOF){
if(c == ' '){
++sp;
if(sp % tab == 0){
++tn;
sp = 0;
}
}
else{
while(tn--){
putchar('\t');
pos += tab;
}
tn = 0;
while(sp--){
putchar(' ');
pos++;
}
sp = 0;
if(c == '\t'){
putchar('\t');
pos += tab;
}
else if(c == '\n'){
putchar(c);
pos = 1;
}
else
putchar(c);
}
}
}