使用c語言編寫wc命令——統計字符數、單詞數、行數

我們知道linux操作系統上有一個非常常用的命令,用來統計字符數、單詞數以及行數的wc命令。今天,我們來嘗試使用c語言來編寫一個類似功能的程序(注:閱讀本文需要一定的c語言基礎)。

編寫該程序時,需要掌握兩個函數的用法,getchar()以及putchar()。

getchar用來從標準輸入中讀取一個字符,而putchar則是向標準輸出打印一個字符。統計標準輸入字符數比較簡單,只要getchar函數還能讀入字符,統計字符數的變量就自增加1。統計行數也簡單,只要讀入的字符為換行符n則將統計函數的變量自增加1。

這里的主要難點在于如何統計單詞的數量,這里我的思路是,設定一個狀態變量IN_WORD,當讀入的字符是空白字符時(空格、水平制表符、換行符都為空白字符),IN_WORD值為0,統計的單詞數目不變,當等到讀入一個非空白字符時,統計單詞的數目加1,IN_WORD值為1,當該狀態值為1時,即使讀入了非空白字符,單詞統計的數目也不變動。

下面,貼出代碼

立即學習C語言免費學習筆記(深入)”;

#include?<stdio.h> #include?<ctype.h>  #define?IN_WORD?1 #define?OUT_WORD?0  void?main?(void) { ????int?nc,nw,nl; ????char?c,word_flag; ???? ????nc?=?nw?=?nl?=?0; ????word_flag?=?OUT_WORD; ???? ????while?((c?=?getchar())?!=?EOF)?{ ????????nc?++; ???????? ????????if?(c?==?'n')?{ ????????????nl?++; ????????} ???????? ????????if?(!isspace(c)?&amp;&amp;?word_flag?==?OUT_WORD)?{ ????????????nw?++; ????????????word_flag?=?IN_WORD; ????????}?else?if?(isspace(c)?&amp;&amp;?word_flag?==?IN_WORD)?{ ????????????word_flag?=?OUT_WORD; ????????}? ????} ???? ????printf("%dt%dt%dn",?nc,?nw,?nl); }</ctype.h></stdio.h>

上述代碼還是非常的簡單的,nc,nw,nl三個變量分別來統計字符數、單詞數以及行數。而word_flag是用來記錄狀態的,狀態分為兩種,IN_WORD以及OUT_WORD。

接下來,我們來測試下上述代碼。下面是一段文本:

Product-minded?engineers?are?developers?with?lots?of?interest?in?the?product?itself.? They?want?to?understand?why?decisions?are?made,?how?people?use?the?product,?and?love?to?be?involved?in?making?product?decisions. They're?someone?who?would?likely?make?a?good?product?manager?if?they?ever?decide?to?give?up?the?joy?of?engineering.? I've?worked?with?many?great?product-minded?engineers?and?consider?myself?to?be?this?kind?of?developer.? At?companies?building?world-class?products,?product-minded?engineers?take?teams?to?a?new?level?of?impact.

上述文本共有86個單詞,共五行。

#?cat?1.txt?|?./a.out? 542?86?5

可以看到,該程序可以正常統計字符數、單詞數以及行數。

以上就是使用

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享