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

     来源于《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语句的使用上,没有参考代码中的简洁和高效

posted on 2011-07-10 15:37  将军之盾  阅读(230)  评论(0编辑  收藏  举报