美文网首页
C 两个习题

C 两个习题

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

练习 1 - 8 编写一个统计空格、制表符与换行符个数的程序。

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

int main() {
    int c;
    long spacecnt = 0, tabcnt = 0, nlcnt = 0;
    
    while((c = getchar()) != EOF) {
        if ( c == ' ') {
            ++spacecnt;
        } else if (c == '\t') {
            ++tabcnt;
        } else if (c == '\n') {
            ++nlcnt;
        }
    }
    
    printf("spacecnt:\t%ld\n", spacecnt);
    printf("tabcnt:\t\t%ld\n", tabcnt);
    printf("newlinecnt:\t%ld\n", nlcnt);

    return 0;
}

编译运行结果如下:

$ ./ex08.out 
When you are old and    grey    and full of sleep,

And nodding by  the fire, take  down    this    book,


And slowly  read,   and dream       of the soft look,
spacecnt:   13
tabcnt:     12
newlinecnt: 6

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

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

int main() {
        int isspace = 0, c;

        while ((c = getchar()) != EOF) {
                if (c != ' ') {
                        isspace = 0;
                } else if (!isspace) {
                        isspace = 1;
                } else {
                        continue;
                } 
                putchar(c);
        } 

        return 0;
}

isspace 可以看成一个标志位,用来标识上一个字符是否是一个空格。
程序中用到了一个 continue 语句,while 循环中 continue 语句的执行意味着立即执行条件测试语句,而忽略当前循环中剩下的内容。
程序编译运行结果如下:

$ ./ex09.out 
When   you are old     and grey  and    full of    sleep,
When you are old and grey and full of sleep,

也可以声明两个变量,一个用来存储上一个字符的值,一个用来存储当前读入的字符,代码清单如下:

/* ex09_2.c */

#include <stdio.h>

int main() {
        int cur, pre;

        /* 为了便于第一个输入的字符比较,需要给 pre 赋非空格初值 */
        pre = EOF;
        while ((cur = getchar()) != EOF) {
                if (cur == ' ') {
                        if (pre == ' ') {
                                continue;
                        } 
                } 
                putchar(cur);
                pre = cur;
        }

        return 0;
}

编译运行结果:

$ ./ex09_2.out 
When you   are   old  and   grey  and   full of  sleep,
When you are old and grey and full of sleep,

相关文章

  • C 两个习题

    练习 1 - 8 编写一个统计空格、制表符与换行符个数的程序。 编译运行结果如下: 练习 1 - 9 编写一个将输...

  • C 习题

    练习 1 - 12 编写一个程序,以每行一个单词的形式打印其输出。 编译运行结果:

  • C 习题

    练习 1 -13 编写一个程序,打印输入中单词长度的直方图。 编译运行结果如下:

  • C 习题

    练习 1 - 17 编写一个程序,打印长度大于 80 个字符的所有输入行。 编译运行结果: 练习 1 - 18 编...

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

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

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

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

  • 第2章练习题答案

    习题1 答: 习题2 答: 习题3 答: 习题4 如果使用gcc -wall -o e4 e4.c编译,则有警告信...

  • C++ Primer Plus习题及答案-第九章

    C++ Primer Plus习题及答案-第九章 习题选自:C++ Primer Plus(第六版)内容仅供参考,...

  • 软考-项目管理(下)

    习题答案 1.1 - 1.9 C A D C D B D A D2.1 - 2.6 C D D D A C 知识点...

  • Android项目实战系列—基于博学谷(六)习题模块

    由于这个模块内容较多,篇幅较长,请耐心阅读。 习题模块分为两个部分 习题列表界面 习题详情界面 一、习题列表界面 ...

网友评论

      本文标题:C 两个习题

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