在输出终端中消除多余空格

来源:互联网 发布:dijkstra java 编辑:程序博客网 时间:2024/06/04 17:45

     来源于《The C Programming Language》的一道习题(P13,PR1-9):

     编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替

     自己实现:

    

     #include <stdio.h>

     int main()
     {


         int c, flag;

         flag = 0;
         while((c = getchar()) != EOF)
                if(c == ' ' && flag == 0)
                {
                       putchar(c);
                      ++flag;
                }
                else if(c == ' ' && flag != 0)
                      ++flag;
                else
                {
                      flag = 0;
                      putchar(c);
                }


        return 0;


     }

     参考代码:

     #include <stdio.h>

     #define NONBLANK 'a'

     int main()
     {


          int c, lastc;

          lastc = NONBLANK;
          while((c = getchar()) != EOF)
          {
                 if(c != ' ')
                       putchar(c);
                 if(c == ' ')
                        if(lastc != ' ')
                               putchar(c);
                 lastc = c;
          }

          return 0;


      }   

      比较两段代码,发现自己的代码还是嫩了些:

      1. 对于flag变量,有点幻数的感觉(不知道这个比喻恰不恰当,哈哈),当别人在读代码时,不能一眼看出它的含义,而参考代码中

          使用的宏NONBLANK就不存在这方面的问题。

      2. 在程序主体结构中,对于判断条件的组织及if else语句的使用上,没有参考代码中的简洁和高效

 

原创粉丝点击