将较长的输入行折成短一些的两行或多行

原创 2016年08月30日 23:05:24
#include<stdio.h>

#define   MAXCOL   15
#define   TABINC   5

char  line[MAXCOL];

int exptab(int pos);
int findblnk(int pos);
int newpos(int pos);
void printl(int pos);

main()
{
    int c, pos;
    
    pos = 0;
    while((c = getchar()) != EOF){
        line[pos] = c;           //将采集到的字符存入数组
        if(c == '\t')            //遇到\t
            pos = exptab(pos);   //分两种情况
        else if(c == '\n'){        //遇到\n   直接打印输出
            printl(pos);
            pos = 0;
        }else if(++pos >= MAXCOL){    //要折行的情况 在MAXCOL-1列处
            pos = findblnk(pos);  //分两种情况   无空格 返回MAXCOL-1 打印 有空格返回空格后面的一个地址
            printl(pos);
            pos = newpos(pos); //无空格情况pos=0  有空格情况pos=后面字符的个数  新的line[]里面的东西将连着下面的字符
        }
    }
}

void printl(int pos)
{
    int i;
    for(i = 0; i < pos; ++i)
        putchar(line[i]);
    if(pos > 0)    
        putchar('\n');
}

int exptab(int pos)   //功能在与将pos之后且没到制表符点的都变成空格  
{
    line[pos] = ' ';        //将空格赋予数组
    for(++pos; pos < MAXCOL && pos % TABINC != 0; ++pos)
        line[pos] = ' ';  
    if(pos < MAXCOL)  //制表符点之后小于MAXCOL
        return pos;
    else{
        printl(pos);  //到达最后一个制表符点了 打印该数组及\n
        return 0;
    }
}

int findblnk(int pos)  //找空格
{
    while(pos > 0 && line[pos] != ' ')    //若在MAXCOL-1处没有空格
        --pos;                     //一直减  直到遇到第一个空格
    if(pos == 0)      //都是字符没有空格
        return MAXCOL;
    else
        return pos + 1;  //找到空格  在此之后+1
}

int newpos(int pos)  //从pos处之后成新的行
{
    int i, j;
    if(pos <= 0 || pos >= MAXCOL)  //无空格的情况
        return 0;
    else{                          //界限内        
        i = 0;                       
        for(j = pos; j < MAXCOL; ++j){      // 将多余的复制到新的一行
            line[i] = line[j];
            ++i;
        }
        return i;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

自己搞,带注释,适合初学者:C程序设计语言练习1-22 把较长的输入行折成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格之后

自己搞,带注释,适合初学者:C程序设计语言练习1-22 把较长的输入行折成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长及在指定的列前没有空...
  • ycjnx
  • ycjnx
  • 2017-06-22 14:38
  • 228

the c programing language 1-22 较长输入行折成短些的多行,非缓冲方式实现

/*  * K&R2 1-21  * Author: Donmmi  * Email:teddy_liu@live.com * 程序说明: 代码核心部分:折行后的当前行长度为未输出...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

把较长的输入行“折”成短一些的两行或多行

源自《The C Programming Language》P25 pr1-22:     编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格符之后...

利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。

#include//舞伴配对问题(用循环队列实现)// #define queuesize 100 typedef struct //定义结构体-人员信息// { char name[...

textview中有很多行,我只让它显示三行,最后显示...,我设置了android:maxLines="3"和android:ellipsize="end",但出现的问题是只显示两行就显示“...”

http://topic.csdn.net/u/20110909/18/7734814e-caa2-4687-8aea-27d404d34f97.html textview中有很多行,我只让它显示三...

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)最近在看马士兵老师的关于Spring方面的视频,讲解的挺好的,到了Spring、Hiber...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)