linux中 wc 命令的简单实现

wc命令 大家一定不会陌生 。用途很多,wc -w  文件名 通常是用来统计一个文件里 单词的个数的。

那么linux内部是如何实现的呢?

 

其实它是这么做的。

 

#include<stdio.h>
/*在单词中*/
#define IN 1
/*不再单词中*/
#define OUT 0
int main()
{
    int c,nl,nw,nc,state;
    /*一开始需要假设不在单词中,state实际上就是标志位*/
    state=OUT;
    nl=nw=nc=0;
    while((c=getchar())!=EOF)
    {
        /*nc实际上输入了多少个字符*/
        ++nc;

        if(c=='\n')
        {
            /*nl实际上就是输入的行数*/
            ++nl;
        }

        /*
        *实际上这里就是先判断是否为空格 如果为空格就可以断定我们进入到下一个单词了。后面的条件判断都是不会走的。然后将标志位赋值为out
        */

        if(c==' '||c=='\n'||c=='\t')
        {
            state=OUT;
        }
        /*如果不是这几种 而且刚好是out 那么就将state赋值为in 并且将nw的值+1 nw其实就是单词的数目*/
        else if(state==OUT)
        {
            state=IN;
            ++nw;
        }
    }
    printf("单词==%d",nw);



}

注释我已经加上去,大家可以自己体会一下,linux内部其实也是这么做的,甚至都是这么写的。

我把功能抽出来 加上一些注释 大家可以自己体会一下  代码一开始不太好理解  。其实实现很简单。。。。。。

 

当然还有更简单便捷的写法。。有想法的同学可以贴一下自己的代码。。。。

posted @ 2012-09-17 22:51  巴主席其实是个程序员  阅读(1293)  评论(0)    收藏  举报