1. 程式人生 > >【C】實現字元(單詞)個數的統計

【C】實現字元(單詞)個數的統計

文章目錄

C語言實現字元(單詞)個數的統計

一、說明

      1、博主使用的是VS Code編輯器,
      2、cmd下執行檔案
      3、winds10系統

二、程式思路分析


 目的:統計單詞
    虛擬碼分析:
           1:讀取一個字元
           2:當有更多輸入時:
                a:遞增字元計數
                b:如果讀完一行,遞增行數計數
                c:如果讀完一個單詞,遞增單詞計數
           3:讀取下一個字元
    
    細化分析:
            1:識別單詞處理
           
              問題:定義what來作為程式識別的單詞
              解答:將一個單詞定位為不含空白(空白:空格、製表符、換行符)的字元序列
            
            2
:查詢具體一個單詞中是否含有某個字元 A: 程式讀取一個單詞 B: 首字元作為一個標記(inword)設定為 1 (也可以在此時遞增單詞計數) C:只要inword為1,後面的非空白字元都不記為單詞的開始 D: 讀到空白字元時,inword重置為0,然後程式讀取下一個單詞 虛擬碼分析: c: 空白字元 如果 c 不是空白字元,且inword為假: 設定inword為真,且給單詞計數 如果 c 是空白字元,且inword為真: 設定inword為假

三、程式碼展示

/* 
    目的:統計單詞
    虛擬碼分析:
           1:讀取一個字元
           2:當有更多輸入時:
                a:遞增字元計數
                b:如果讀完一行,遞增行數計數
                c:如果讀完一個單詞,遞增單詞計數
           3:讀取下一個字元
    
    細化分析:
            1:識別單詞處理
           
              問題:定義what來作為程式識別的單詞
              解答:將一個單詞定位為不含空白(空白:空格、製表符、換行符)的字元序列
            
            2:查詢具體一個單詞中是否含有某個字元
              A: 程式讀取一個單詞
              B: 首字元作為一個標記(inword)設定為 1 (也可以在此時遞增單詞計數)
              C:只要inword為1,後面的非空白字元都不記為單詞的開始
              D: 讀到空白字元時,inword重置為0,然後程式讀取下一個單詞
            
            虛擬碼分析:
              c: 空白字元
              如果 c 不是空白字元,且inword為假:
                  設定inword為真,且給單詞計數
              如果 c 是空白字元,且inword為真:
                  設定inword為假
 */

#include <stdio.h>
#include <ctype.h>   // 字元函式--提供了一系列專門處理字元的函式
#include <stdbool.h> // bool,true,false提供定義
#define STOP '|'     // 作為末尾標識

// 主函式
int main(void)
{

    char c;            // 讀入字元
    char prev;         // 讀入的前一個字元
    long n_chars = 0L; // 字元數

    int n_lines = 0;     // 行數
    int n_words = 0;     // 單詞數
    int p_lines = 0;     // 不完整的行數
    bool inword = false; // 如果c 在單詞中,inword=true

    printf("請輸入要分析的文字(|或終止):\n");
    prev = '\n'; // 用於識別完整的行

    while ((c = getchar()) != STOP)
    { // 當輸入的字元非|時進行如下操作

        n_chars++; // 統計字元數
        if (c == '\n')
        {              // 當輸入的字元是換行符時進行如下操作
            n_lines++; // 統計行數
        }
        if (!isspace(c) && !inword)// ------------- 有個問題
        {                  // !isspace()非空白字元且!inword為true時進行如下操作
            inword = true; // 開始一個新的單詞
            n_words++;     // 統計單詞個數
        }
        else if (isspace(c) && inword)
        {
            inword = false; // 達到單詞的末尾
        }
        prev = c; // 儲存字元的值
    }

    if(prev != '\n'){ // 如果不是換行符
        p_lines = 1; // 設定起始行為 1
    }
    printf("字元個數 = %ld,單詞數 = %d,行數 = %d",n_chars,n_words,n_lines);

    return 0;
}

四、結果

在這裡插入圖片描述

五、結果分析

      得出結果之後,其實發現此程式還要進一步完善,有個問題:要是使用者輸入的單詞之間有多個空格會是個什麼結果。這個問題在程式碼中沒有進行一個處理所以統計的結果博主大膽猜測可能多餘空格都會進行作為字元個數進行計算的。
      So,,,有待完善!!!