【C言語】文字列内の単語数・母音数・指定文字の出現頻度を一度に数える方法
文字列を入力し、その中に含まれる単語の総数、母音の数、そしてユーザーが指定した特定文字の出現頻度を一度に求めるC言語プログラムを紹介します。
例えば、文字列「I love my MOM」と文字「M」を入力すると、以下のような結果が得られます。
入力:文字列を入力してください : I love my MOM 頻度を調べたい文字を入力してください : M M の出現頻度の合計 : 2 母音の総数 : 4 単語の総数 : 4
アルゴリズム
開始 ステップ1: 文字列配列 str、文字 ch、カウンタ i を宣言し、freq・vow・word を 0 で初期化する ステップ2: 文字列と文字 ch を入力する ステップ3: i = 0 から str[i] != '\0' である間、++i しながらループする ステップ3.1: ch == str[i] であれば freq をインクリメントする ステップ3.2: 終了 ステップ3.3: str[i] が 'a' 'e' 'i' 'o' 'u' 'A' 'E' 'I' 'O' 'U' のいずれかであれば vow をインクリメントする ステップ3.4: 終了 ステップ3.5: str[i] が空白文字 ' ' であれば word をインクリメントする ステップ3.6: 終了 ステップ4: ループ終了 終了
サンプルコード
#include <stdio.h>
int main() {
char str[1000], ch;
int i, freq=0, vow=0, word=0;
printf("Enter a string of your choice: ");
gets(str);
printf("Enter a character of which you want to find the frequency: ");
scanf("%c",&ch);
for(i = 0; str[i] != '\0'; ++i){
if(ch == str[i]) { // 文字の出現頻度を調べる
++freq;
}
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') {
++vow; // 母音の数を数える
}
if (str[i] == ' ') {
word++; // 単語数を数える
}
}
printf("Frequency of %c = %d", ch, freq);
printf("\ntotal number of vowels in a string are %d " ,vow );
printf("\ntotal number of words in a string are %d " ,word+1 );
return 0;
}実行結果
上記のプログラムを実行すると、以下のような出力が得られます。
Enter a string of your choice: I love PrograMMIng Enter a character of which you want to find the frequency: M Frequency of M = 2 total number of vowels in a string are 6 total number of words in a string are 3
プログラムのポイント
- 文字列を1文字ずつ走査し、条件に一致するたびにそれぞれのカウンタを増やしていきます。
- 母音の判定では、大文字・小文字の両方(a, e, i, o, u, A, E, I, O, U)をチェックしています。
- 単語数は「空白文字の数+1」で求めます。これは最後の単語の後には空白がないためです。
- 大文字と小文字は区別してカウントされるため、「PrograMMIng」に含まれる「M」は2回とカウントされます。
注意: gets() 関数はバッファオーバーフローの危険があるため、実用的なプログラムでは fgets() の使用が推奨されます。
-
C言語で文字列⇔数値の相互変換を行う方法|sscanf関数とsprintf関数の使い方
はじめにC言語のプログラミングにおいて、「文字列から数値への変換」および「数値から文字列への変換」とは何を意味するのでしょうか?本記事では、標準ライブラリ関数を使った双方向の変換方法を、構文・サンプルコード・実行結果とあわせて解説します。解決策:使用する2つの関数C言語には、この変換を実現するための関数が用意されています。sscanf() ― 文字列を数値に変換するsprintf() ― 数値を文字列に変換する文字列から数値への変換(sscanf)sscanf()関数を使うことで、文字列として格納されたデータを、書式指定子に従って解析し、数値として各変数に読み込むことができます。scanf()
-
C言語で中実・中空の菱形(ひし形)パターンを出力するプログラム
プログラムの概要 本記事では、C言語を使用して、下図のような中実(塗りつぶし)の菱形と中空(外枠のみ)の菱形の星形パターンをコンソールに出力する方法を解説します。 アルゴリズム 中空の菱形(Hollow Rhombus)の場合 1. ユーザーから中空菱形の行数を入力してもらう 2. 入力された行数と同じ行数を持つ中空の菱形を作成する 3. 1行目は、行数と同じ個数のアスタリスク(*)をすべて出力する 4. 2行目以降は、各行の先頭と末尾のみ「*」を出力し、その間は空白のままにする 5. 最終行に達するまで手順4を繰り返す 6. 最終行は、行数と同じ個数の「*」をすべて出力する 中実の菱形