当前位置:编程学习 > C/C++ >>

Count blanks,tabs and newlines

by freeuniverser

程序语言现在是越来越多,但是好多都是在现有语言的基础上改了改,本质上并没有给程序员带来什么,这就提醒广大程序员不要被某种语言限制住了,不要过分迷恋某种语言,因为现在还没有完美语言(也许人类追求的完美本来就是个美丽的错误)。这个月的TIOBE上,C语言又回到了首位,但是也不必太在意,仅供参考嘛。

C语言的一些小程序举例:

Count blanks,tabs and newlines


/*First Version*/
#include <stdio.h>
int main(void)
{
  int blanks;
  int tabs;
  int newlines;
  int c;
 
  blanks = 0;
  tabs = 0;
  newlines = 0;

  while((c = getchar()) != EOF)
  {
    if(c == ' ')
      blanks++;
    if(c == '\t')
      tabs++;
    if(c == '\n')
      newlines++;
  }
  printf("\nBlanks: %d\nTab: %d\nNewline: %d\n",
    blanks,tabs,newlines);
  return 0;
}写程序时的注释非常重要,以前初写的时候乱写,而且命名单字母一大堆,其实吧,好的命名与注释同等重要,甚至见名知意比注释更加有力。程序小的话还可以,但是涉及大点的项目的话,如果注释和命名不注意,那么很容易产生问题,后期的维护会异常困难,没人愿意再深究你的变量究竟代表什么,甚至你自己都不知道当初的意思是什么。


 1 /*Second Version*/
 2 #include <stdio.h>
 3
 4 int mian(void)
 5 {
 6   int blanks;
 7   int tabs;
 8   int newlines;
 9   int c;
10   int done;
11   int lastchar;
12
13   blanks = 0;
14   tabs = 0;
15   newlines = 0;
16   done = 0;
17   lastchar = 0;
18
19   while(done == 0)
20   {
21     c = getchat();
22     if(c == ' ')
23       blanks = blanks + 1;
24     if(c == '\t')
25       tabs = tabs + 1;
26     if(c == '\n')
27       newlines = newlines + 1;
28     if(c == EOF)
29     {
30       if(lastchar == '\n')
31       {
32         newlines = newlines + 1;
33       }
34       done = 1;
35     }
36     lastchar = c;
37   }
38   printf("\nBlanks: %d\nTabs: %d\nNewlines: %d\n",
39     blanks,tabs,newlines);
40   return 0;
41 }自加自减运算符看似方便,但是滥用其实很不好,容易绕进去。其实好多语言在设计上都是在玩儿技巧,这样可以少敲点字,可以少占点内存,可以……现在内存不小了,多敲几个字母也没什么,实际上是在节省时间,如果后期维护的话,那将会少很多力气,这不挺好的吗?

Copy input to output


 1 /*First Version*/
 2 #include <stdio.h>
 3 #define NONBLANK 'c'
 4 int main(void)
 5 {
 6    int c;
 7    int lastchar;
 8    lastchar = NONBLANK;
 9    
10    while((c == getchar()) != EOF)
11    {
12      if(c != ' ')
13        putchar(c);
14      if(c == ' ' && lastchar != ' ')
15        putchar(c);
16      lastchar = c;
17    }
18 }用getchar()和putchar()搭配干活不累,有好多这样的函数可以拿来用,当然你也可以自己去写自己的,不过他山之石何不用呢?如果不是特别需要的地方,那么不妨就“拿来主义”下吧


 1 /******Second Version*********************/ 
 2   int c;
 3   int inspace;
 4   inspace = 0;
 5   while((c = getchar()) != EOF)
 6   {
 7     if(c == ' ')
 8     {
 9       if(inspace ==0)
10       {
11         inspace = 1;
12         putchar(c);
13       }
14     }
15     if(c != ' ')
16     {
17       inspace = 0;
18       putchar(c);
19     }
20   }Copy input to output,replace tab by \t,backspace by \b and backslash by \\

这个程序的\b是个问题,可能会有点错误,或者不是很理想,有兴趣自己可以写写。


 1  //*****First Version*****************************/
 2  
 3   int c;
 4   while((c = getchar()) != EOF)
 5   {
 6     if(c == '\t')
 7       printf("\\t");
 8     if(c == '\b')
 9       printf("\\b");
10     if(c == '\\')
11       printf("\\\\");
12     if(c != '\t' &&c != '\b' && c != '\\')
13       putchar(c);
14       }简单的用if判断条件,虽然显得有点单调,但是确实非常常用的。这很符合人的逻辑,如果怎么……你看其实程序语言里面用的单词其实没有太难的,对比好多语言你就会发现,像while,if,for等等,好多都是重复的,就行写文章一样,把不同的字做一个合乎逻辑的排列组合即可,程序也是如此,只不过是换种表达方式罢了。


 1 /******Second Version***************************/
 2   int c,t;
 3   while((c = getchar()) != EOF)
 4   {
 5     t = 0;
 6     if(c == '\\')
 7     {
 8       putchar('\\');
 9       putchar('\\');
10       t = 1;
11     }
12     if(c == '\t')
13     {
14       putchar('\\');
15       putchar('t');
16       t = 1;
17     }
18     if(c == '\b')
19     {
20       putchar('\\');
21       putchar('b');
22       t = 1;
23     }
24     if(t == 0)
25       putchar(c);
26   }putchar()双剑合璧,显得

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,