Chinaunix首页 | 论坛 | 博客
  • 博客访问: 429041
  • 博文数量: 71
  • 博客积分: 26
  • 博客等级: 民兵
  • 技术积分: 1246
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-23 14:46
个人简介

linux --- 一切皆文件

文章分类

全部博文(71)

文章存档

2021年(1)

2019年(2)

2018年(4)

2017年(7)

2016年(11)

2015年(1)

2014年(2)

2013年(33)

2012年(10)

分类: C/C++

2013-05-17 23:22:08

读取一行或多行,在N列的之前最后的空格处换行。。。
遵从自顶向下的编程思想,先想好main函数里要实现的功能,然后再想函数具体的是实现方法。

#include

#define MAXLEN 10
#define TABSIZE 4

char line[MAXLEN];

int extable(int pos);        //把table转换成空格展开
int findblk(int pos);        //从后往前寻找空格处
void printl(int pos);        //打印line数组中的字符
int newpos(int pos);      //把空格后到MAXLEN的字符移到line的最前面最后line的开始

int main(void)
{
    int c,pos;
    pos = 0;

    while((c = getchar()) != EOF){
        line[pos] = c;
        pos ++;
        if(c == '\t'){
            pos = extable(pos);
        }else if(c == '\n'){
            printl(pos);
            pos = 0;
        }else if (pos >= MAXLEN){
            pos = findblk(pos);
            printl(pos);
            pos = newpos(pos);
        }
    }
    return 0;
}

/*
    将table展开转换成空格,存入line数组
*/
int extable(int pos)
{
    line[pos] = ' ';
    while(++pos  && pos < MAXLEN && (pos % TABSIZE != 0))
        line[pos] = ' ';
        if(pos < MAXLEN)
            return pos;
        else{
            printl(pos);
            return 0;
        }
}

/*
    打印line数组中的内容
*/
void printl(int pos)
{
    int i;
    for(i = 0;i < pos;i ++){
        putchar(line[i]);
    }
    if(pos > 0)
        putchar('\n');
}

/*
    从后寻找line中最后出现空格的地方
*/
int findblk(int pos)
{
    int i = 0;
    while(pos > 0 && line[pos] != ' '){
        pos --;
    }

    if(pos == 0)
        return MAXLEN;
    else
        return pos+1;
}

/*
    将空格后的字符移到line的最前面
*/
int newpos(int pos)
{
    int i,j = 0;

    if(pos < 0 || pos > MAXLEN){
        return 0;
    }else {
        for(i = pos;i < MAXLEN;i ++){
            line[j] = line[i];
            j ++;
        }
        return j;
    }
}

阅读(752) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~