练习 1-22 自动折行程序
/************************************************************************** 类型:<c程序设计语言(第二版.新版)> 练习 1-22 名称:lx.c author: wubenzhimu data: 2012.11 功能:编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的 位置在输入行的第n列之前的最后一个非空格之后。要保证程序能够智能地处理 输入行很长以及在指定的列前边没有空格或制表符时的情况。 ***************************************************************************/ #include <stdio.h> #define MAXLINE 1000 #define TRUELENGTH 10 /* 超过这个长度折行 */ int getLine ( char charArr[] ); void copy ( char charArr[], char toArr[], int length ); int main () { int putLength = 0; /* 输入数组的长度 */ char charArr[MAXLINE] = { 0 }; char toArr[MAXLINE] = { 0 }; putLength = getLine ( charArr ); if ( putLength > 0 ) { copy ( charArr, toArr, putLength ); } printf("%s", toArr); return 0; } /* 把输入的字符串保存到数组中 */ int getLine ( char charArr[] ) { int c, i = 0; while ( (c=getchar()) != EOF ) { charArr[i] = c; i++; } charArr[i] = '\n'; charArr[++i] = '\0'; return i; } /* 复制指定长度的数组并符合添加的加'\n' */ void copy ( char charArr[], char toArr[], int length ) { int i = 0, j = 0, t = 0; while ( i <= length ) { if ( t == TRUELENGTH ) { while ( charArr[i]=='\b' || charArr[i]==' ' ) { i++; } toArr[j] = '\n'; t = 0; } else { if ( t == 1) { while ( charArr[i]=='\b' || charArr[i]==' ' ) { i++; } } toArr[j] = charArr[i]; } i++; j++; t++; } }
输出结果: