美文网首页
C 习题 entab函数实现

C 习题 entab函数实现

作者: 吃柠檬的鸮 | 来源:发表于2019-03-30 17:39 被阅读0次

习题1 - 21 编写程序 entab,将空格串替换为最少数量的制表符和空格,但要保持单词直接的间隔不变。假设制表符终止位的位置是固定的。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪一种替换字符比较好?

完整代码清单如下:

/* ex21.c */
#include <stdio.h>

#define TAB     8
#define LIMIT   1000

int getLine(char line[], int limit) {
    int i = 0;
    int c;

    if ((c = getchar()) == EOF) {
        return 0;
    }
    
    while (c != '\n') {
        line[i++] = c;
        c = getchar();
    }
    line[i++] = '\0';

    return i;
}

void entab(char line[]) {
    int i = 0;
    int space = 0;
    int output = 0;
    int delete;

    while (line[i] != '\0') {
        if (line[i] == ' ') {
            ++space;
            ++i;
        } else {
            if (space) {
                while ((output % TAB + space) > TAB) {
                    putchar('\t');
                    delete = (TAB - output % TAB);
                    output += delete;
                    space -= delete;
                }
                while (space) {
                    putchar(' ');
                    --space;
                    ++output;
                }
            }
            putchar(line[i++]);
            ++output;
        }
    }
    putchar('\n');
}

int main() {
    char line[LIMIT];

    while (getLine(line, LIMIT) > 0) {
        entab(line);
    }

    return 0;
}

编译运行结果:

$ ./ex21.out
123      123
123  123
12   12      123          123
12   12      123      123
$

相关文章

  • C 习题 entab函数实现

    习题1 - 21 编写程序 entab,将空格串替换为最少数量的制表符和空格,但要保持单词直接的间隔不变。假设制表...

  • C语言练习题: 数组部分

    C语言练习题:数组部分 数组实现冒泡排序(15题) 上一篇: C语言练习题:函数部分 求一正整数限定内所有素数 数...

  • C语言练习题: 函数部分

    C语言练习题:函数部分(9题) 上一篇: C语言练习题:循环部分 下一篇: C语言练习题:数组部分 斐波那契,函数...

  • C语言练习题:循环部分

    C语言练习题:循环部分(20题) 上一篇: C语言练习题:if语句部分 下一篇: C语言练习题:函数部分 求一正整...

  • 【笨办法学Python】- 习题18-26

    习题 18:命名、变量、代码、函数 2.习题 19:函数和变量 3.习题 20:函数和文件 4.习题 21:函数可...

  • C语言函数开发习题

    在我们编写一些较大程序时如果所有代码都在main函数里实现那么就会使得整个程序代码会出现非常多的重复代码,使得程序...

  • 100000570 - 《算法笔记》2.6小节——C/C++快速

    100000570 - 《算法笔记》2.6小节——C/C++快速入门->函数 问题 A: 习题7-5 字符串逆序存...

  • c++ 类与对象练习程序 委托构造函数

    参考资料:《C++ Primer习题集(第5版)》 委托构造函数(C++11):使用它所属类的其他构造函数执行它自...

  • C++ 引用传递的学习

    C++ 引用与引用作为函数的参数C++函数的三种传递方式为:值传递、指针传递和引用传递 C++ 上课习题 刘月林2...

  • 技能

    C++ C++特性 C++11 多态和继承 构造函数 析构函数 手写代码实现string类 手写代码实现智能指针 ...

网友评论

      本文标题:C 习题 entab函数实现

      本文链接:https://www.haomeiwen.com/subject/llssbqtx.html