编写一个程序,把较长的输入行“折”成短一些的两行或多行。
#include <stdio.h>
#define MAXCOL 10
#define TABINC 8
void printl(int pos);
int exptab(int pos);
int newline(int pos);
int findline(int pos);
char line[MAXCOL];
int main(void)
{
int pos = 0;
int c = 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) // '=' 可以与 newline中的 j < MAXCOL互换等号
{
pos = findline(pos);
printl(pos);
pos = newline(pos);
}
}
}
void printl(int pos)
{
int i = 0;
for(; i < pos; ++i)
{
putchar(line[i]);
}
if(pos > 0)
{
putchar('\n');
}
}
int exptab(int pos)
{
line[pos] = ' ';
for(++pos; pos % TABINC != 0 && pos < MAXCOL; ++pos)
{
line[pos] = ' ';
}
if(pos < MAXCOL)
{
return pos;
}
else
{
printl(pos);
pos = 0;
}
}
int findline(int pos)
{
while(pos > 0 && line[pos] != ' ')
{
--pos;
}
if(pos == 0)
{
return MAXCOL;
}
else
{
return pos + 1;
}
}
int newline(int pos)
{
int i = 0;
int j = 0;
if(pos >= MAXCOL || pos <= 0) //节省计算次数
{
return 0;
}
else
{
i = 0;
for(j = pos; j < MAXCOL; j++)
{
line[i] = line[j];
++i;
}
return i;
}
}