zoukankan      html  css  js  c++  java
  • c程序设计语言_习题1-9_将输入流复制到输出流,并将多个空格过滤成一个空格

      Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank.

      编写这样一个程序,实现将输入流复制到输出流,但是要将输入流中多个空格过滤成一个空格。 


    1.旗帜变量方法

    #include <stdio.h>
     
    int main(void)
    {
      int c;
      int inspace;
     
     //这里用了旗帜变量来过滤多余空格 inspace
    = 0; while((c = getchar()) != EOF) { if(c == ' ') { if(inspace == 0) { inspace = 1; putchar(c); } } /* We haven't met 'else' yet, so we have to be a little clumsy */ if(c != ' ') { inspace = 0; putchar(c); } } return 0; }


    2.保存上一个输入字符

    Chris Sidi writes: "instead of having an "inspace" boolean, you can keep track of the previous character and see if both the current character and previous character are spaces:"
    Chris Sidi 写道:“我们可以不用‘inspace’这样一个布尔型旗帜变量,通过跟踪判断上一个接收字符是否为空格来进行过滤。”

     
    #include <stdio.h>
     
    /* count lines in input */
    int
    main()
    {
            int c, pc; /* c = character, pc = previous character */
     
            /* set pc to a value that wouldn't match any character, in case
            this program is ever modified to get rid of multiples of other
            characters */
     
            pc = EOF;
     
            while ((c = getchar()) != EOF) {
                    if (c == ' ')
                            if (pc != ' ')   /* or if (pc != c) */ 
                                    putchar(c);
     
                    /* We haven't met 'else' yet, so we have to be a little clumsy */
                    if (c != ' ')
                            putchar(c);
                    pc = c;
            }
     
            return 0;
    }


    3.利用循环进行过滤

    Stig writes: "I am hiding behind the fact that break is mentioned in the introduction"!

     
    #include <stdio.h>
     
    int main(void)
    {
            int c;
            while ((c = getchar()) != EOF) {
                    if (c == ' ') {
                           putchar(c);
                           while((c = getchar()) == ' ' && c != EOF)
                                   ;
                   }
                   if (c == EOF)
                           break; /* the break keyword is mentioned
                                   * in the introduction... 
                                   * */
     
                   putchar(c);
            }
            return 0;
    } 
  • 相关阅读:
    服务管理--systemctl命令
    dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
    QML与Qt C++ 交互机制探讨与总结
    sync命令
    linux 下shell中if的“-e,-d,-f”是什么意思
    POJ 1936 All in All(模拟)
    POJ 1088 滑雪(记忆化搜索)
    POJ 3280 Cheapest Palindrome(DP 回文变形)
    POJ 3181 Dollar Dayz(高精度 动态规划)
    HDU 1114 Piggy-Bank(完全背包)
  • 原文地址:https://www.cnblogs.com/haore147/p/3647917.html
Copyright © 2011-2022 走看看