Menu
Coddy logo textTech

復習:単語の出現頻度カウンター

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 63/63。

challenge icon

チャレンジ

簡単

テキスト入力を分析するための単語頻度カウンターを実装するC言語プログラムを作成してください。プログラムは以下の要件を満たす必要があります:

  1. 以下の仕様で countWordOccurrences という名前の関数を作成してください:
    • 2つの char* パラメータ、sentencetargetWord を受け取ります
    • ターゲットの単語が文中に現れる回数を表す整数を返します
    • ループを使用して文を1文字ずつ処理します
    • スペースを区切り文字として使用して単語の境界を識別します
    • 文から各単語を抽出し、strcmp() を使用してターゲットの単語と比較します
    • 完全一致(大文字と小文字を区別する比較)をカウントします
  2. 以下の仕様で extractWord という名前の関数を作成してください:
    • char* の sentence、整数の startIndex、および char* の word パラメータを受け取ります
    • 抽出された単語の後のインデックスを表す整数を返します
    • startIndex から始まり、スペースまたはヌル終端文字が見つかるまで、単一の単語を抽出します
    • 抽出された単語を word パラメータに格納します
    • 抽出された単語を完成させるためにヌル終端文字を追加します
  3. 以下の仕様で analyzeText という名前の関数を作成してください:
    • char* の sentence パラメータを受け取ります
    • 文中の単語の総数を表す整数を返します
    • スペースを区切り文字として識別することで単語をカウントします
    • 複数の連続するスペースを正しく処理します(それらを単一の区切り文字として扱います)
  4. main 関数内で以下を行ってください:
    • サイズ 200 の文字配列 inputSentence を宣言します
    • サイズ 50 の文字配列 searchWord を宣言します
    • 入力から文を読み取ります(スペースで区切られた複数の単語が含まれる場合があります)
    • 検索するターゲットの単語を読み取ります
    • analyzeText 関数を呼び出し、総単語数を次の形式で出力します:Total words: [count]
    • countWordOccurrences 関数を呼び出し、結果を次の形式で出力します:Occurrences of '[searchWord]': [count]
    • 単語の頻度をパーセンテージとして計算し、小数点以下1桁で次の形式で出力します:Frequency: [percentage]%
    • 頻度のカテゴリを判定して出力します:
      • 頻度が 0.0% の場合:Category: Not found と出力します
      • 頻度が 0.0% より大きく 20.0% 未満の場合:Category: Rare と出力します
      • 頻度が 20.0% 以上 50.0% 以下の場合:Category: Common と出力します
      • 頻度が 50.0% より大きい場合:Category: Frequent と出力します

このチャレンジでは、文字列操作、トークン化、およびテキスト処理の習熟度をテストします。文を個々の単語に分割し、文字列の完全一致を比較し、テキストデータを分析するために連携する複数の関数を実装する練習をします。このプログラムは、多くのC言語アプリケーションに不可欠な、実世界のテキスト処理技術を実演するものです。

自分で試してみよう

#include <stdio.h>
#include <string.h>

// TODO: ここに extractWord 関数を記述してください

// TODO: ここに countWordOccurrences 関数を記述してください

// TODO: ここに analyzeText 関数を記述してください

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // 入力文章を読み込む
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // 改行文字があれば削除する
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // 検索単語を読み込む
    scanf("%s", searchWord);
    
    // TODO: 以下にコードを記述してください
    // analyzeText 関数を呼び出し、総単語数を格納する
    // countWordOccurrences 関数を呼び出し、出現回数を格納する
    // 出現頻度のパーセンテージを計算する
    // 頻度カテゴリーを決定する
    
    // 結果を指定された形式で出力する
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    return 0;
}

Logic & Flowのすべてのレッスン