【C言語】strlen()関数を使って文中に繰り返し現れる文字の出現回数を数える方法
問題
ユーザーがコンソールから入力した1文字が、入力された文章の中で何回出現するかを数え、その結果をstrlen()関数を使用して画面に出力するプログラムを作成します。
解決策
文字の出現回数を数えるために使用するロジックは以下の通りです。
- 実行時にユーザーに対して文章の入力を求めます。
printf("Enter a sentence\n");
gets(str);- 実行時にユーザーに対して出現回数を調べたい文字の入力を求めます。
printf("Enter a character to check how many times it is repeating\n");
scanf("%c",&c);- 文章の中で該当する文字を数えるロジックは以下の通りです。文字列を先頭から1文字ずつ走査し、入力された文字と一致した場合にカウントを増やしていきます。
for(i=0;i<strlen(str);i++){
if(str[i]==c){
count++;
}
}- ループ終了後、カウント結果を出力します。
サンプルコード
以下は、文章の中で特定の文字が何回繰り返されているかを数えるCプログラムの完全な例です。
#include<stdio.h>
#include<string.h>
main(){
int i,count=0;
char c,str[100];
printf("Enter a sentence\n");
gets(str);
printf("Enter a character to check how many times it is repeating\n");
scanf("%c",&c);
for(i=0;i<strlen(str);i++){
if(str[i]==c){
count++;
}
}
printf("Letter %c repeated %d times\n",c,count);
}実行結果
上記のプログラムをコンパイルして実行すると、以下のような出力が得られます。
Enter a sentence Here are the C Programming question and answers Enter a character to check how many times it is repeating n Letter n repeated 4 times
この例では、入力された文章の中に文字「n」が4回出現しているため、「Letter n repeated 4 times」と表示されています。
補足:より安全な実装について
上記のコードで使用しているgets()関数は、バッファオーバーフローを引き起こす危険性があるため、現在のC標準(C11以降)では廃止されています。実際の開発では、fgets()関数を使用して安全に入力を受け取ることをおすすめします。また、main関数も「int main(void)」のように戻り値の型を明示し、末尾で「return 0;」を返す書き方がベストプラクティスとされています。
-
連結リスト(リンクリスト)の長さを求めるC言語プログラム
連結リスト(リンクリスト)は動的メモリ割り当てを利用するデータ構造であり、要素の追加や削除に応じてサイズが柔軟に変化します。連結リストは「ノード」と呼ばれる要素の集合として定義され、各ノードはデータ部とリンク部(次のノードへのポインタ)の2つの部分で構成されています。データ・リンク・連結リストの関係は、以下のように表現できます。連結リストの種類連結リストには主に以下の4種類があります。単方向連結リスト(シングルリンクリスト)双方向連結リスト(ダブルリンクリスト)循環単方向連結リスト循環双方向連結リスト再帰を使って長さを求めるロジック本記事では、再帰呼び出しを利用して連結リストの長さ(ノード数)
-
Pythonで配列の反転数(転倒数)をカウントする方法
はじめに この記事では、配列内の反転(インバージョン)をカウントする問題とその解決策について詳しく解説します。 問題定義 問題: リストが与えられたとき、その中に含まれる反転の数をカウントして表示します。 反転数とは、配列を昇順にソートされた状態にするために必要な入れ替え(スワップ)の回数を表す指標です。具体的には、i < j かつ arr[i] > arr[j] を満たす要素のペア(i, j)の総数として定義されます。 実装例 # 反転数をカウントする関数 def InvCount(arr, n): inv_count = 0 for i in range(n