首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符統計練習:實現字符、單詞與行數計數

     編輯:關於C語言

經典教材習題實作

這是一個源自《The C Programming Language》(第二版)的經典練習程序,旨在統計標準輸入中的字符數、單詞數以及行數。程序展示了狀態機在文本處理中的典型應用。

核心邏輯解析

程序定義了兩個狀態常量:IN(在單詞內)和 OUT(在單詞外)。變量 STATE 用於追蹤當前掃描位置是否處於單詞中。主循環透過 getchar() 逐字符讀取輸入,直到遇到字符 'q' 為止。

  • 字符計數 (nc):每讀取一個字符即遞增。
  • 行數計數 (nl):遇到換行符 '\n' 時遞增。
  • 單詞計數 (nw):當狀態從 OUT 轉為 IN 時(即遇到非空白字符且之前處於單詞外部),單詞數加一。

空白字符包括空格 ' '、換行符 '\n' 和製表符 '\t',遇到這些字符會將狀態重置為 OUT。

完整代碼示例

#include <stdio.h>
#define IN 1  /* 在單詞中 */
#define OUT 0 /* 不在單詞中 */

/* The C programming language[second edition] 練習小程序
   功能:統計輸入的字符數、單詞數和行數。 */
int main() {
    int c;               // 存儲輸入的字符
    int STATE = OUT;     // 狀態初始為不在單詞中
    int nc = 0;          // 記錄字符數
    int nl = 0;          // 記錄行數
    int nw = 0;          // 記錄單詞數

    while ((c = getchar()) != 'q') { // 輸入 'q' 則退出
        nc++;
        if (c == '\n') nl++;
        if (c == ' ' || c == '\n' || c == '\t')
            STATE = OUT;
        else if (STATE == OUT) {
            STATE = IN;
            nw++;
        }
    }
    printf("%d %d %d\n", nl, nw, nc);
    return 0;
}

注意事項與改進建議

原代碼中 printf 格式字符串 "%d % d %d\n" 存在多餘空格,已在上方修正。此外,若需支援 EOF(如 Ctrl+D/Ctrl+Z)作為結束條件,可將循環條件改為 (c = getchar()) != EOF,這樣更符合通用輸入習慣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved