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;
    } 
  • 相关阅读:
    css中margin-left与left的区别
    Python文件和目录模块介绍:glob、shutil、ConfigParser
    [ Python入门教程 ] Python文件基本操作_os模块
    使用Pyinstaller转换.py文件为.exe可执行程序
    Windows命令行打开常用界面
    如何做好性能测试_流程篇
    Windows查看指定端口是否占用和查看进程
    ‘操作无法完成 ,因为其中的文件夹或文件已在另一程序中打开’问题解决
    bat脚本基础教程
    vi编辑器常用命令
  • 原文地址:https://www.cnblogs.com/haore147/p/3647917.html
Copyright © 2011-2022 走看看