#include<stdio.h>
#define MAXCOL 20
#define TABINC 8
char line[MAXCOL];
void printl(int pos);
int exptab(int pos);
int findblnk(int pos);
int newpos(int pos);
main()
{
int c,pos;
pos=0;
while((c=getchar()) != EOF){
line[pos]=c;
if (c=='\t')
pos=exptab(pos);
else if(c=='\n'){
printl(pos);
pos=0;
}else if (++pos >= MAXCOL){
pos=findblnk(pos);
printl(pos);
pos=newpos(pos);
}
}
}
void printl(int pos)
{
int i;
for(i=0;i<pos;++i)
putchar(line[i]);
if(pos>0)
putchar('\n');
}
int exptab(int pos)
{
line[pos]=' ';
for(++pos;pos<MAXCOL && pos%TABINC != 0;++pos)
line[pos]=' ';
if(pos<MAXCOL)
return pos;
else{
printl(pos);
return 0;
}
}
int findblnk(int p)
{
while(p>0 && line[p]!=' '){
--p;
}
if(p==0)
return MAXCOL;
else{
return p+1;
}
}
int newpos(int pos)
{
int i,j;
if(pos<=0 || pos>=MAXCOL)
return 0;
else{
i=0;
for(j=pos;j<MAXCOL;++j){
line[i]=line[j];
++i;
}
return i;
}
}
摘自k&r习题解答