练习 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++;
    }
}

输出结果:

posted @ 2012-11-12 21:40  无本之木a  阅读(480)  评论(0编辑  收藏  举报