您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關使用c語言編寫wc命令統計字符數、單詞數、行數的案例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
我們知道linux操作系統上有一個非常常用的命令,用來統計字符數、單詞數以及行數的wc命令。使用c語言來編寫一個類似功能的程序
編寫該程序時,需要掌握兩個函數的用法,getchar()以及putchar()。
getchar用來從標準輸入中讀取一個字符,而putchar則是向標準輸出打印一個字符。統計標準輸入字符數比較簡單,只要getchar函數還能讀入字符,統計字符數的變量就自增加1。統計行數也簡單,只要讀入的字符為換行符\n則將統計函數的變量自增加1。
這里的主要難點在于如何統計單詞的數量,這里我的思路是,設定一個狀態變量IN_WORD,當讀入的字符是空白字符時(空格、水平制表符、換行符都為空白字符),IN_WORD值為0,統計的單詞數目不變,當等到讀入一個非空白字符時,統計單詞的數目加1,IN_WORD值為1,當該狀態值為1時,即使讀入了非空白字符,單詞統計的數目也不變動。
下面,貼出代碼
#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) && word_flag == OUT_WORD) { nw ++; word_flag = IN_WORD; } else if (isspace(c) && word_flag == IN_WORD) { word_flag = OUT_WORD; } } printf("%d\t%d\t%d\n", nc, nw, nl); }
上述代碼還是非常的簡單的,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
可以看到,該程序可以正常統計字符數、單詞數以及行數。
關于使用c語言編寫wc命令統計字符數、單詞數、行數的案例就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。