【C言語】文字列内の単語の出現回数をカウントするプログラム

【C言語】文字列内の単語の出現回数をカウントするプログラム

はじめに

文字列内の単語の出現回数をカウントするプログラムは、C言語で文字列操作を学ぶ上で非常に有用な課題です。文字列はプログラム内で頻繁に使用されるため、単語のカウントなどの操作は基礎的な技術として重要です。このプログラムは、与えられた文字列内で各単語が何回出現するかをカウントし、結果を表示するものです。

プログラムの流れ

プログラムの流れは以下のようになります:

  • 文字列を入力として受け取る。
  • 文字列を単語ごとに分割する。
  • 各単語の出現回数を数える。
  • 出現回数を表示する。

C言語では、文字列操作を行うために、stdio.hstring.hといった標準ライブラリを使用することが多いです。特に、文字列の分割にはstrtok関数を使用し、出現回数のカウントには配列やハッシュテーブルを用います。

コード解説

ここでは、基本的な文字列内の単語出現回数をカウントするプログラムのコードを示し、各部分を解説します。

#include 
#include 
#include 

#define MAX_WORDS 100
#define MAX_LENGTH 100

// 単語の出現回数をカウントする関数
void count_words(char *str) {
    char *word;
    char words[MAX_WORDS][MAX_LENGTH];
    int count[MAX_WORDS] = {0};
    int word_count = 0;

    // 文字列を単語に分割
    word = strtok(str, " ,.-");
    while (word != NULL) {
        int found = 0;

        // 単語がすでに出現しているか確認
        for (int i = 0; i < word_count; i++) {
            if (strcmp(words[i], word) == 0) {
                count[i]++;
                found = 1;
                break;
            }
        }

        // 新しい単語なら追加
        if (!found && word_count < MAX_WORDS) {
            strcpy(words[word_count], word);
            count[word_count] = 1;
            word_count++;
        }

        // 次の単語へ
        word = strtok(NULL, " ,.-");
    }

    // 結果の表示
    for (int i = 0; i < word_count; i++) {
        printf("%s: %d\n", words[i], count[i]);
    }
}

int main() {
    char str[MAX_LENGTH];

    // 入力を受け取る
    printf("文字列を入力してください: ");
    fgets(str, sizeof(str), stdin);

    // 改行を取り除く
    str[strcspn(str, "\n")] = 0;

    // 単語のカウント
    count_words(str);

    return 0;
}
        

上記のプログラムでは、文字列を入力として受け取り、その中で出現する単語を数えます。strtokを使用して文字列を区切り、strcmpで既に出現した単語を検出します。出現した単語は、words配列に格納され、出現回数はcount配列で管理されます。

例1: シンプルな文字列

例として、次の文字列を考えます:

入力例: "apple banana apple grape"
        

この文字列をプログラムに入力すると、次のような結果が得られます:

apple: 2
banana: 1
grape: 1
        

プログラムは「apple」が2回、他の単語はそれぞれ1回ずつ出現したことを正しくカウントしています。

例2: 複数の単語

次に、もっと多くの単語を含む文字列を試してみましょう:

入力例: "hello world hello hello"
        

この入力に対する結果は次の通りです:

hello: 3
world: 1
        

プログラムは「hello」が3回出現し、「world」が1回出現していることをカウントします。

例3: 大文字小文字の区別

C言語ではデフォルトで大文字と小文字が区別されます。次の入力を試してみましょう:

入力例: "Apple apple Apple"
        

結果は次のようになります:

Apple: 2
apple: 1
        

ここでは「Apple」と「apple」が異なる単語としてカウントされているため、区別がされていることが確認できます。

例4: 複雑な文字列

複雑な文字列にも対応できます。例えば次のような文字列を入力するとします:

入力例: "I am, an example. This is an example, indeed!"
        

プログラムは次のように出力します:

I: 1
am: 1
an: 2
example: 2
This: 1
is: 1
indeed: 1
        

このように、区切り文字(カンマ、ピリオドなど)をうまく処理し、各単語の出現回数を正しくカウントしています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です