首页 > 代码库 > 编写一个程序把较长的输入行“折”成短一些的两行或多行

编写一个程序把较长的输入行“折”成短一些的两行或多行

/*******************************************
编写一个程序把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的
第n列之前的最后一个非空格符之后。要保证程序能够智能地处理输入行很长以及
在指定的列前没有空格或制表符的情况。
*************************************************/
#include <stdio.h>
#define MAXCOL 10
#define TABINC 8
char line[MAXCOL];
int exptab(int pos);
int newpos(int pos);
int findblnk(int pos);
void printl(int pos);
int main(void){
    int c,pos;
    pos = 0;
    while((c = getchar()) != EOF){
        line[pos] = c;//储存当前的字符
        if(c == ‘\t‘)//判断是否为制表符
            pos = exptab(pos);
        else if (c ==‘\n‘){
            printl(pos);//假如c等等换行符,则打印当输入的字符!
            pos = 0;
        }else if (++pos >= MAXCOL){
            pos = findblnk(pos);
            printl(pos);
            pos = newpos(pos);
        }
    }    
}
//定义 printl函数
void printl(int pos){
    int i;
    for(i = 0; i < pos; ++i)
        putchar(line[i]);
    if (pos > 0)
        putchar(‘\n‘);    
}
//定义exptab函数
int exptab(int pos){
    line[pos] = ‘ ‘;
    for (++pos; pos < MAXCOL && pos % TABINC != 0;++pos)//先执行++pos)-->再次比较大小-->{} -->(;;++pos) -->{} -->
        line[pos] = ‘ ‘;
    if(pos < MAXCOL)
        return 0;
    else{
        printl(pos);
        return 0;
    }
}
//定义findblnk函数
int findblnk(int pos){
    while(pos > 0 && line[pos] != ‘ ‘)
        --pos;
    if(pos == 0)
        return MAXCOL;
    else
        return pos+1;

}
//定义newpos函数
int newpos(int pos){
    int i;
    int j;
    if (pos <= 0 || pos >= MAXCOL)
        return 0;
    else{
        i = 0;
        for( j = pos; j < MAXCOL; ++j){
            line[i] = line[j];
            ++i;
        }
        return i;
    }
}

执行结果:
wKioL1QJg-CgKqrxAAFSIIfYrPo431.jpg/*********************************************
MAXCOL 是一个符号常量,它给出了输入行的折行位置,即输入行的第n列。
整型变量POS是程序在文本行中的当前位置。程序将在输入行的第一处第n列之前对该输入行折行。
函数findblnk从输入行的pos处开始倒退着寻找一个空格(目的是为了保持折行位置的单词的完整
如果找到了一个空格符,它就返回紧跟在该空格符后面的那个位置的下标;如果没有找到空格,它就返回MAXCOL。
函数printl打印输出从位置零到位置pos-1之前的字符。
函数newpos调整输入行,它将把从位置pos开始的字符复制到下一个输出行的开始,然后再返回变量pos的新值。
***************************************************/

编写一个程序把较长的输入行“折”成短一些的两行或多行