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;
} 
复制代码

 

本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3647917.html,如需转载请自行联系原作者
相关文章
|
8月前
|
移动开发 Unix C语言
日常知识点之c语言按行读配置文件,及行尾符CRLF导致的问题
日常知识点之c语言按行读配置文件,及行尾符CRLF导致的问题
106 0
|
8月前
|
存储 编译器 C语言
牛客网学习之倒置字符串(详解fgets函数,如何读取含有空格的字符串)
牛客网学习之倒置字符串(详解fgets函数,如何读取含有空格的字符串)
87 0
去除txt文件空行批处理程序
刚好遇到一个需要去除txt文件空行的问题,就做了一个批处理bat程序来操作,挺方便,附上来给大家分享一下
417 0
|
存储 C语言 C++
【C语言】如何读取带空格的字符串?
【C语言】如何读取带空格的字符串?
668 0
【编程】89%的人不知道的字符拼接成字符串的注意点
【编程】89%的人不知道的字符拼接成字符串的注意点
92 0
|
C语言
【C 语言】文件操作 ( 文件结尾判定 )
【C 语言】文件操作 ( 文件结尾判定 )
125 0
|
Linux Windows
文本文件中,如何判断有效换行?
文本文件中,如何判断有效换行?
164 0
|
程序员
代码中目录是否以分隔符结尾的再讨论
代码中目录是否以分隔符结尾的再讨论
75 0
|
人工智能 Shell
Shell脚本编程小技巧(1)-如何解决脚本中多行重定向结束符不用对齐到行首
参考资料 https://blog.csdn.net/ccwwff/article/details/48519119 1、what?问题需求是什么? 首先需求从何而来呢,主要是编写shell脚本,用cat 进行多行输入重定向的时候,结束符必须要对齐行首,格式不好看。
838 0