Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で文字列内の母音と子音の数を数える方法をわかりやすく解説

問題

C言語で、入力された文字列の中に含まれる母音と子音の数を数えるプログラムの書き方を紹介します。

解決策

母音を判定するための基本ロジックは、次のような条件式です。

if(str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U' || str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u')

この条件が真であれば母音のカウントを1つ増やし、そうでなければ子音のカウントを1つ増やします。

サンプルプログラム

以下は、文字列内の母音と子音の数を数えるCプログラムです。

/* 文字列内の母音と子音を数える */
#include <stdio.h>
int main(){
    char str[100];
    int i, vowels, consonants;
    i = vowels = consonants = 0;
    printf("Enter any String : ");
    gets(str);
    while (str[i] != '\0'){
        if(str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U' || str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u'){
            vowels++;
        } else {
            consonants++;
        }
        i++;
    }
    printf("vowels in this String = %d\n", vowels);
    printf("consonants in this String = %d", consonants);
    return 0;
}

実行結果

このプログラムをコンパイルして実行すると、次のような出力が得られます。

Enter any String : TutoriasPoint
vowels in this String = 6
consonants in this String = 7

注意点と改善版

サンプルで使用している gets() は入力サイズをチェックできず、バッファオーバーフローを引き起こす危険があるため、C11規格で廃止されました。実際の開発では fgets() の使用が推奨されます。また、元のコードでは空白や記号などもすべて「子音」として数えてしまう点にも注意が必要です。ctype.hisalpha() を組み合わせて英字だけを判定すれば、より正確な結果が得られます。

これらの点を踏まえた改良版のコードは次の通りです。

#include <stdio.h>
#include <ctype.h>

int main(void){
    char str[100];
    int i = 0, vowels = 0, consonants = 0;

    printf("Enter any String : ");
    if (fgets(str, sizeof(str), stdin) != NULL) {
        while (str[i] != '\0') {
            if (isalpha((unsigned char)str[i])) {
                switch (str[i]) {
                    case 'A': case 'E': case 'I':
                    case 'O': case 'U':
                    case 'a': case 'e': case 'i':
                    case 'o': case 'u':
                        vowels++;
                        break;
                    default:
                        consonants++;
                        break;
                }
            }
            i++;
        }
    }
    printf("vowels in this String = %d\n", vowels);
    printf("consonants in this String = %d\n", consonants);
    return 0;
}

このように、ループで1文字ずつ判定しながらカウンタを更新するだけで、母音と子音の数を簡単に集計できます。文字列処理の基礎を理解するのに最適な例題なので、ぜひ自分の環境でも動かして確認してみてください。

  1. C言語で文字列⇔数値の相互変換を行う方法|sscanf関数とsprintf関数の使い方

    はじめにC言語のプログラミングにおいて、「文字列から数値への変換」および「数値から文字列への変換」とは何を意味するのでしょうか?本記事では、標準ライブラリ関数を使った双方向の変換方法を、構文・サンプルコード・実行結果とあわせて解説します。解決策:使用する2つの関数C言語には、この変換を実現するための関数が用意されています。sscanf() ― 文字列を数値に変換するsprintf() ― 数値を文字列に変換する文字列から数値への変換(sscanf)sscanf()関数を使うことで、文字列として格納されたデータを、書式指定子に従って解析し、数値として各変数に読み込むことができます。scanf()

  2. Pythonで文字列内の母音の数を数える方法をわかりやすく解説

    Pythonで文字列内の母音の数を数える基本手順Pythonでは、シンプルなループ処理を使うことで、文字列に含まれる母音(a、e、i、o、u)の数を簡単に数えることができます。ここでは、初心者にもわかりやすいように、基本的な実装手順を順を追って解説します。ステップ1:母音をまとめた文字列を用意するまず、すべての母音を格納した文字列オブジェクトを宣言します。>>> vowels = aeiouステップ2:カウント用の変数を初期化する次に、母音の出現回数を記録するための変数を0で初期化します。>>> count = 0ステップ3:文字列を走査して母音を判定する対