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

原创 2016年05月31日 21:24:17

MAXCOL=10,pos取值:

012345678901234567890123456789

main中else if(++pos>=MAXCOL)既赋值又判断。折行的位置在输入行的第n列之前的最后一个空格之后,若无空格则输出MAXCOL个字符。

#include <stdio.h>
#define MAXCOL 10
#define TABINC 8

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')
            pos=exptab(pos);
       else if(c=='\n'){
        printl(pos);
        pos=0;
       }
       else if(++pos>=MAXCOL){
        pos=findblnk(pos);
        printl(pos);
        pos=newpos(pos);
       }

    }
}

/* 输出空格及其前字符 */
void printl(int pos)
{
    int i;
    for(i=0;i<pos;++i)
        putchar(line[i]);
    if(pos>0)
        putchar('\n');
}

/* 将制表符替换为空格 */
int exptab(int pos)
{
    line[pos]=' ';  /* 8字符后制表符的特殊情形 */
    for(++pos;(pos<MAXCOL) && (pos%TABINC!=0);++pos)
        line[pos]=' ';
    if(pos<MAXCOL) 
        return pos; /* 剩余8、9继续读取字符 */
    else{
        printl(pos);
        return 0;
    }
}

/* 确定输出位置 */
int findblnk(int pos)
{
    while(pos>0 && line[pos]!=' ')
        --pos;
    if(pos==0)
        return MAXCOL;
    else
        return pos+1; /* 从后往前第一个空格后1字符位置 */
}

int newpos(int pos)
{
    int i,j;
    if(pos<=0 || pos>=MAXCOL)
        return 0;
    else{
        i=0;
        for(j=pos;j<MAXCOL;++j){ /* j自从后往前第一个空格后1字符位置开始 */
            line[i]=line[j];
            ++i;
        }
        return i;
    }
}
Created with Raphaël 2.1.0开始读取字符是否是制表符?使用空格替换,满10个则输出是否是换行符?输出是否读取了MAXCOL个字符判断输出位置、输出、补录空格后字符并重置pos是否读取结束?结束yesnoyesnoyesnoyesno

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

     源自《The C Programming Language》P25 pr1-22:     编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非...
  • roma823
  • roma823
  • 2011年04月25日 21:04
  • 2240

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

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

把较长的输入行折成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个元素。

#include #define MAXLINE 1000 /* max input line size */char line[MAXLINE]; /*current input line*/int...
  • lizhidefengzi
  • lizhidefengzi
  • 2016年11月23日 00:16
  • 331

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

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

编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符

#include #include #define MAX_LEN 1000 int main() { char longest[MAX_LEN]; //用来保存最长的数组 char in...
  • u012024772
  • u012024772
  • 2015年10月26日 23:43
  • 496

练习1-18 编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行

#include #define MAXLINE 1000 int getline(char line[],int maxline); int remove(char s[]);int main()...
  • Civil_CHOW
  • Civil_CHOW
  • 2016年05月29日 17:56
  • 1314

练习22

  /***************************************************************************** 22. 在一个4*4的小方格(如图所示...
  • thmfire
  • thmfire
  • 2008年10月26日 10:22
  • 175

删除每个输入行末尾的空格,制表符,并删除全空格行

     源自《The C Programming Language》P22 pr1-18:     编写一个程序,删除每个输入行末尾的空格,制表符,并删除完全是空格的行     代码:     #i...
  • roma823
  • roma823
  • 2011年04月20日 20:35
  • 3485

练习1-9 编写一个将输入复制到输出的程序,并将其中多个连续的空格用一个空格代替。

/* 时间:2017/8/2 地点:工程北629 功能:将输入复制到输出,多个空格合并成一个空格 思想:将空格设置成标志位,判断是否在空格中,决定是否输出 说明:参考课本《The C Pro...
  • AA11224488
  • AA11224488
  • 2017年08月17日 17:27
  • 224

删除空格:删除字符串首部和尾部连续的空格

【面试题】    给定一个字符串,要求删除其首部和尾部连续的空格。      注:夹在非空格字符之间的空格是合法的,不用删除。        【问题分析】【方法一】1. 我们知道,通过下面这...
  • qigaoqiang
  • qigaoqiang
  • 2017年10月04日 04:21
  • 234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:练习1-22 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个空格之后
举报原因:
原因补充:

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