#include<stdio.h>
#define MAXCOL 15
#define TABINC 5
char line[MAXCOL];
int exptab(int pos);
int findblnk(int pos);
int newpos(int pos);
void printl(int pos);
main()
{
int c, pos;
pos = 0;
while((c = getchar()) != EOF){
line[pos] = c; //将采集到的字符存入数组
if(c == '\t') //遇到\t
pos = exptab(pos); //分两种情况
else if(c == '\n'){ //遇到\n 直接打印输出
printl(pos);
pos = 0;
}else if(++pos >= MAXCOL){ //要折行的情况 在MAXCOL-1列处
pos = findblnk(pos); //分两种情况 无空格 返回MAXCOL-1 打印 有空格返回空格后面的一个地址
printl(pos);
pos = newpos(pos); //无空格情况pos=0 有空格情况pos=后面字符的个数 新的line[]里面的东西将连着下面的字符
}
}
}
void printl(int pos)
{
int i;
for(i = 0; i < pos; ++i)
putchar(line[i]);
if(pos > 0)
putchar('\n');
}
int exptab(int pos) //功能在与将pos之后且没到制表符点的都变成空格
{
line[pos] = ' '; //将空格赋予数组
for(++pos; pos < MAXCOL && pos % TABINC != 0; ++pos)
line[pos] = ' ';
if(pos < MAXCOL) //制表符点之后小于MAXCOL
return pos;
else{
printl(pos); //到达最后一个制表符点了 打印该数组及\n
return 0;
}
}
int findblnk(int pos) //找空格
{
while(pos > 0 && line[pos] != ' ') //若在MAXCOL-1处没有空格
--pos; //一直减 直到遇到第一个空格
if(pos == 0) //都是字符没有空格
return MAXCOL;
else
return pos + 1; //找到空格 在此之后+1
}
int newpos(int pos) //从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;
}
}
#define MAXCOL 15
#define TABINC 5
char line[MAXCOL];
int exptab(int pos);
int findblnk(int pos);
int newpos(int pos);
void printl(int pos);
main()
{
int c, pos;
pos = 0;
while((c = getchar()) != EOF){
line[pos] = c; //将采集到的字符存入数组
if(c == '\t') //遇到\t
pos = exptab(pos); //分两种情况
else if(c == '\n'){ //遇到\n 直接打印输出
printl(pos);
pos = 0;
}else if(++pos >= MAXCOL){ //要折行的情况 在MAXCOL-1列处
pos = findblnk(pos); //分两种情况 无空格 返回MAXCOL-1 打印 有空格返回空格后面的一个地址
printl(pos);
pos = newpos(pos); //无空格情况pos=0 有空格情况pos=后面字符的个数 新的line[]里面的东西将连着下面的字符
}
}
}
void printl(int pos)
{
int i;
for(i = 0; i < pos; ++i)
putchar(line[i]);
if(pos > 0)
putchar('\n');
}
int exptab(int pos) //功能在与将pos之后且没到制表符点的都变成空格
{
line[pos] = ' '; //将空格赋予数组
for(++pos; pos < MAXCOL && pos % TABINC != 0; ++pos)
line[pos] = ' ';
if(pos < MAXCOL) //制表符点之后小于MAXCOL
return pos;
else{
printl(pos); //到达最后一个制表符点了 打印该数组及\n
return 0;
}
}
int findblnk(int pos) //找空格
{
while(pos > 0 && line[pos] != ' ') //若在MAXCOL-1处没有空格
--pos; //一直减 直到遇到第一个空格
if(pos == 0) //都是字符没有空格
return MAXCOL;
else
return pos + 1; //找到空格 在此之后+1
}
int newpos(int pos) //从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;
}
}