首頁 運維 linux運維 使用c語言寫wc指令-統計字元數、單字數、行數

使用c語言寫wc指令-統計字元數、單字數、行數

Oct 26, 2020 am 11:26 AM
c語言 wc

我們知道linux作業系統上有一個非常常用的指令,用來統計字元數、單字數、行數的wc指令。今天,我們來嘗試使用c語言來寫一個類似功能的程式(註:閱讀本文需要一定的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 == &#39;\n&#39;) {
            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&#39;re someone who would likely make a good product manager if they ever decide to give up the joy of engineering. 
I&#39;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指令-統計字元數、單字數、行數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

c語言swap什麼意思 c語言swap什麼意思 Apr 03, 2025 pm 06:27 PM

C 語言中 swap 指令用於交換兩個變量的值:swap(x, y):交換 x 和 y 的值可通過使用臨時變量或位運算等多種方式實現

c語言of是什麼意思 c語言of是什麼意思 Apr 03, 2025 pm 06:51 PM

of 運算符指向結構體或聯合體的成員,用法為 expr.member,用於訪問或賦值成員的值。

c語言中\0是什麼意思 c語言中\0是什麼意思 Apr 03, 2025 pm 05:09 PM

C 語言中'\0'表示空字符,用途主要包括:1. 結束字符串,作為字符串的結束標誌;2. 終止字符數組,通過'\0'確定長度;3. 填充未使用的內存;4. 在早期版本中表示布爾值,但現在應使用bool類型。

c語言中strlength的意思 c語言中strlength的意思 Apr 03, 2025 pm 06:18 PM

strlen() 函數獲取字符串長度,不包括空字符 '\0':1. 計算不含空字符的字符數;2. 遍歷字符串直至找到空字符;3. 返回字符串長度,類型為 size_t。

c語言string是什麼意思 c語言string是什麼意思 Apr 03, 2025 pm 06:24 PM

在 C 語言中,字符串是一種以空字符 '\0' 結尾的字符數組,用於存儲文本。字符串操作包括獲取長度 (strlen)、連接 (strcat)、複製 (strcpy) 和比較 (strcmp)。

c語言exit是什麼意思 c語言exit是什麼意思 Apr 03, 2025 pm 06:39 PM

C語言中exit()函數用於立即終止程序執行並返回控制權給調用進程,接受一個參數表示程序退出狀態碼。調用exit()後,程序不再執行任何代碼,並且所有已分配內存都不會自動釋放。

c語言htoc什麼意思 c語言htoc什麼意思 Apr 03, 2025 pm 06:45 PM

htoc 函數將十六進製字符串轉換為整數。它逐字符掃描字符串,並根據其在字符串中的位置將每個十六進制數字乘以適當的冪次方,然後累加起來得到最終結果。

libv是兩個 libv是兩個 Apr 03, 2025 pm 08:03 PM

我開發了一個名為Lua-Libuv的項目,並樂於分享我的經驗。項目初衷是探索如何利用Libuv(一個用C語言編寫的異步I/O庫)構建簡單的HTTP服務器,而無需深入掌握C語言。借助ChatGPT的輔助,我完成了HTTP.C的基礎代碼。在處理持久連接時,我成功實現了在適當的時機關閉連接並釋放資源。起初,我嘗試創建一個簡單的服務器,通過關閉連接來結束主程序,但遇到了一些問題。我嘗試過使用流式傳輸發送數據塊,雖然有效,但這會阻塞主線程。最終,我決定放棄這個方法,因為我的目標並非深入學習C語言。最終,我

See all articles