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;
    } 
  • 相关阅读:
    selenium与表格的二三事
    ABP使用Mysql数据库
    Asp.net Mvc 使用EF6 code first 方式连接MySQL总结
    MVC后台数据赋值给前端JS对象
    Entity Framework 6 Code First 实践系列(1):实体类配置总结
    用git extensions clone项目时提示此主机的指纹不是由putty注册的解决办法
    AutoMapper5.0的用法
    StackExchange.Redis helper访问类封装
    Github上十大c#开源项目排行榜
    vs2015使用GIt连接git.oschina.net/
  • 原文地址:https://www.cnblogs.com/haore147/p/3647917.html
Copyright © 2011-2022 走看看