题目:
编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n 列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及
在指定的列前没有空格或制表符时的情况。
题目分析
需要判断输入的每行字符串长度,如果长度超过n,则将此行拆分为多个长度不超过n的行。
拆分点的判断。如果字符串长度超过n,在第n个位置的字符如果不是空格,则将第n个字符换到下一行,如果是空格,则继续判断,将后面第一个不是空格的字符换到下一行。
编程思路
1.先将字符串录入
2.判断每行的长度是否大于n,如果小于等于n,则直接输出;如果大于n,判断需要拆分成几行。然后输出。
代码实现
int main()
{
int i, rowlength, rownum;
char line[MAXCHAR];
char c;
i = 0;
rowlength = 0;
rownum = 0;
for (i = 0; (((c = getchar()) != EOF) && i < MAXCHAR); i++)
line[i] = c;
i = 0;
while ( (c = line[i]) != '\n' && i < 1000)
{
++rowlength;
if (rowlength < MAXLENGTH)
{
putchar(c);
}
else if (rowlength >= MAXLENGTH && c != ' ')
{
putchar('\n');
putchar('-');
putchar(c);
rowlength = 0;
}
else if (rowlength >= MAXLENGTH && c == ' ')
{
putchar('\n');
rowlength = 0;
}
i++;
}
return 0;
}
运行结果
输入:abcdefghijk lmnopqrst uvwxyza bcdefghijklm nopqrstuvw xyzabcd efghijklmnopqrs tuvwxyzabcdef ghijklmnopq rstuvwxyz 输出:abcdefghijk lmnopqrst uvwx -yza bcdefghijklm nopqrstu -vw xyzabcd efghijklmnopqrs tuvwxyzabcdef ghijklmnop -q rstuvwxyz