復習:単語の出現頻度カウンター
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 63/63。
チャレンジ
簡単テキスト入力を分析するための単語頻度カウンターを実装するC言語プログラムを作成してください。プログラムは以下の要件を満たす必要があります:
- 以下の仕様で
countWordOccurrencesという名前の関数を作成してください:- 2つの
char*パラメータ、sentenceとtargetWordを受け取ります - ターゲットの単語が文中に現れる回数を表す整数を返します
- ループを使用して文を1文字ずつ処理します
- スペースを区切り文字として使用して単語の境界を識別します
- 文から各単語を抽出し、
strcmp()を使用してターゲットの単語と比較します - 完全一致(大文字と小文字を区別する比較)をカウントします
- 2つの
- 以下の仕様で
extractWordという名前の関数を作成してください:char*の sentence、整数のstartIndex、およびchar*の word パラメータを受け取ります- 抽出された単語の後のインデックスを表す整数を返します
startIndexから始まり、スペースまたはヌル終端文字が見つかるまで、単一の単語を抽出します- 抽出された単語を
wordパラメータに格納します - 抽出された単語を完成させるためにヌル終端文字を追加します
- 以下の仕様で
analyzeTextという名前の関数を作成してください:char*の sentence パラメータを受け取ります- 文中の単語の総数を表す整数を返します
- スペースを区切り文字として識別することで単語をカウントします
- 複数の連続するスペースを正しく処理します(それらを単一の区切り文字として扱います)
- 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と出力します
- 頻度が 0.0% の場合:
- サイズ 200 の文字配列
このチャレンジでは、文字列操作、トークン化、およびテキスト処理の習熟度をテストします。文を個々の単語に分割し、文字列の完全一致を比較し、テキストデータを分析するために連携する複数の関数を実装する練習をします。このプログラムは、多くの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;
}