• 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;
    } 
  • 相关阅读:
    android 布局中的单位及分辨率自解
    7种例子讲解Android Dialog!
    jqDnR 层拖动插件 潇湘博客
    jQuery选择器热榜
    左边补0 php 潇湘博客
    Javascript代码压缩、加密算法的破解分析及工具实现
    discuz 整合总结
    js 格式化 潇湘博客
    Linux内核网络协议栈深入分析(五)套接字的绑定、监听、连接和断开
    Linux内核基于Netfilter的内核级包过滤防火墙实现
  • 原文地址:https://www.cnblogs.com/haore147/p/3647917.html
Copyright © 2020-2023  润新知