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

原创 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;
    }
}

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

编写一个程序,把较长的输入行“折”成短一些的多行,折行的位置在输入行的第N列之前的最后一个非空格之后

#include #define TABINC 4 #define MAXCOL 10 //指定输入行的折行位置 char line[MAXCOL]; /* 全局数组,在以下函数中都能...
  • talent_CYJ
  • talent_CYJ
  • 2016年06月25日 10:25
  • 1001

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

/*  * K&R2 1-21  * Author: Donmmi  * Email:teddy_liu@live.com * 程序说明: 代码核心部分:折行后的当前行长度为未输出...
  • u011409801
  • u011409801
  • 2015年01月30日 19:32
  • 333

练习1-22 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个空格之后

MAXCOL=10,pos取值:012345678901234567890123456789main中else if(++pos>=MAXCOL)既赋值又判断。#include #define MA...
  • Civil_CHOW
  • Civil_CHOW
  • 2016年05月31日 21:24
  • 752

Hadoop之多行读取数据

一,需求: 在map执行前,即setInputFormatClass过程,会进行数据的读入,默认的是每次读入一行数据,进行计算。现在需要改成每次读入两行数据并且合并结果输出。二,思路及解决方法: ...
  • young_so_nice
  • young_so_nice
  • 2016年05月06日 20:17
  • 4685

Android设置TextView显示一行或多行

在listView的item中或者是特殊的业务需求中,会要求TextView的内容不完全显示,只有通过一个指定的操作后才显示所有的,比如说一个按钮或者是其它的什么控件。 要想实现这个效果并不难,只要...
  • MrZhang_happy
  • MrZhang_happy
  • 2016年01月05日 15:06
  • 11512

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

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

从C开始_结构体_结构数组2(程序讨论)+清空输入行原理

我们继续看看这个程序 [csharp] view plaincopyprint? #include     #define MAXTITL 40 ...
  • Dr_meng
  • Dr_meng
  • 2014年12月14日 22:53
  • 253

kettle的job中执行每行

etl kettle 进阶学习教程 权威 关于循环的示例
  • neweastsun
  • neweastsun
  • 2014年09月04日 08:31
  • 4133

RadioButton 多行 多列显示

RadioButton 多行 多列显示
  • u013147860
  • u013147860
  • 2016年07月18日 14:52
  • 1298

linux shell 将多行文件转换为一行

说实话,虽然对shell编程包括awk有所了解,但是对sed的多行与一行的处理还是不甚理解,在网上搜罗了一篇文章觉得还不错,记录一下:     今天一个工程师问我,怎么将一个文件中的...
  • hjxhjh
  • hjxhjh
  • 2013年12月11日 16:27
  • 29453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将较长的输入行折成短一些的两行或多行
举报原因:
原因补充:

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