C言語で文字列内に最も多く出現する文字を検索するプログラム
文字型データの配列は「文字列」と呼ばれます。C言語では、文字列はヌル文字('\0')で終わる文字配列として扱われます。
文字列の宣言
文字配列(文字列)を宣言する構文は以下のとおりです。
char stringname [size];
例えば、char string[50]; と宣言すると、最大50文字まで格納できる文字列が定義されます。
文字列の初期化
文字列の初期化には、主に次の2つの方法があります。
1. 文字定数を使う方法
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
2. 文字列リテラルを使う方法
char string[10] = "Hello";
アクセス: 文字列を読み込む際には、制御文字列 %s を使用します。%s は、ヌル文字('\0')に到達するまで文字列を読み込み続けます。
最も多く出現する文字を見つけるロジック
文字列内で最も頻繁に出現する文字を特定するには、まず各文字の出現回数(頻度)を求めます。
手順1:各文字の頻度をカウントする
文字コードをインデックスとして利用し、頻度配列にカウントを記録していきます。
while(string[i] != '\0'){
value = (int)string[i];
frequency[value] += 1;
i++;
}
手順2:最大出現回数の文字を特定する
頻度配列を走査し、最も高い値を持つインデックスを求めます。
maximum = 0;
for(i=0; i<CHARS; i++){
if(frequency[i] > frequency[maximum])
maximum = i;
}
サンプルプログラム
以下は、文字列内で最も多く出現する文字を検索するCプログラムの完全な例です。
#include <stdio.h>
#define SIZE 100 // 文字列の最大サイズ
#define CHARS 255 // 扱える最大文字数
int main(){
char string[SIZE];
int frequency[CHARS];
int i = 0, maximum;
int value;
printf("Enter the string:\n ");
gets(string);
for(i=0; i<CHARS; i++){
frequency[i] = 0; // 全文字の頻度を0で初期化
}
/* 各文字の出現頻度を求める */
i=0;
while(string[i] != '\0'){
value = (int)string[i];
frequency[value] += 1;
i++;
}
/* 最大頻度の文字を求める */
maximum = 0;
for(i=0; i<CHARS; i++){
if(frequency[i] > frequency[maximum])
maximum = i;
}
printf("Maximum occurrence character is '%c' = %d times.", maximum,
frequency[maximum]);
return 0;
}
gets() の代わりに fgets() や scanf() の使用が推奨されています。実行結果
上記のプログラムを実行すると、以下のような結果が出力されます。
Enter the string: tutorials point Maximum occurrence character is 't' = 3 times.
この例では、入力された文字列「tutorials point」の中で、文字「t」が3回出現しており、最も多く使われている文字であることが分かります。
-
【PHP】文字列内に各文字が出現する回数を数えるプログラムの書き方
PHPでは、文字列の中に各文字が何回出現するかを簡単に調べることができます。本記事では、str_replace()、str_split()、連想配列を組み合わせて、文字列中の各文字の出現回数をカウントする方法をサンプルコード付きで解説します。 実装例 <?php $str = "welcome to tutorials point"; $str = str_replace(" ", "", $str); // 空白を削除 $arr = str_spli
-
Pythonで操作を繰り返した後に得られる最大のバイナリ文字列を求めるプログラム
ここでは、あるバイナリ文字列(0と1だけで構成された文字列)が与えられたとき、次の2種類の操作を何回でも適用できるものとして、最終的に得られる数値として最大のバイナリ文字列を求める方法を解説します。文字列に部分文字列 00 が含まれる場合、それを 10 に置き換えられる。文字列に部分文字列 10 が含まれる場合、それを 01 に置き換えられる。問題の例たとえば入力が s = 001100 の場合、出力は 111011 になります。実際には、次のように文字列を変形できます。(00)1100 → 101(10)0 → 1010(10) → 10(10)01 → 100(10)1 → 1(00)01