【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' に到達するまで文字列を読み書きします。
最小出現文字を求めるロジック
文字列内で出現回数が最も少ない文字を見つける基本的な考え方は、各文字の出現頻度を記録した配列を走査し、頻度が0でない文字の中から最小値を持つものを特定するというものです。
for(i = 0; i < CHARS; i++){
if(frequency[i] != 0){
if(frequency[minimum] == 0 || frequency[i] < frequency[minimum])
minimum = i;
}
}
C言語サンプルプログラム
以下は、文字列内で最も出現回数の少ない文字を検索するCプログラムの完全な例です。
#include <stdio.h>
#define SIZE 100 // 文字列の最大サイズ
#define CHARS 255 // 扱える最大文字数
int main(){
char string[SIZE];
int frequency[CHARS];
int i = 0, minimum;
int value;
printf("文字列を入力してください:\n");
gets(string);
// すべての文字の出現頻度を0で初期化
for(i = 0; i < CHARS; i++){
frequency[i] = 0;
}
// 各文字の出現頻度を集計
i = 0;
while(string[i] != '\0'){
value = (int)string[i];
frequency[value] += 1;
i++;
}
// 最小の出現頻度を持つ文字を検索
minimum = 0;
for(i = 0; i < CHARS; i++){
if(frequency[i] != 0){
if(frequency[minimum] == 0 || frequency[i] < frequency[minimum])
minimum = i;
}
}
printf("最も出現回数が少ない文字は '%c' で、%d 回です。\n", minimum, frequency[minimum]);
return 0;
}
注意: gets() 関数はバッファオーバーフローの危険性があるため、実際の開発では fgets() の使用が推奨されます。
実行結果
上記のプログラムを実行すると、次のような結果が出力されます。
文字列を入力してください: tutorialspoint 最も出現回数が少ない文字は 'a' で、1 回です。
-
復号化した文字列のk番目の文字を求める方法 – Pythonでの実装
問題の概要 エンコードされた文字列では、部分文字列の繰り返しが「部分文字列+出現回数」の形式で表現されます。たとえば、文字列が pq2rs2 で k=5 の場合、復号化後の文字列は pqpqrsrs となり、5番目の文字は r です。 ここで注意したいのは、出現回数が2桁以上になるケースも存在するという点です。たとえば a12b のような入力では、「a」が12回繰り返されることを正しく読み取れる必要があります。 具体例 入力として string = pq4r2ts3、k = 11 が与えられた場合を考えてみましょう。復号化後の文字列は pqpqpqpqrrtststs となるため、11番目の
-
Pythonで文字列内の各文字の出現回数を調べる方法【3つのアプローチ解説】
この記事では、指定された文字列の中に、それぞれの文字が何回出現するかを求める方法について解説します。 問題設定: 1つの文字列が与えられたとき、その文字列に含まれる各文字の出現回数を求める必要があります。 ここでは、以下の3つのアプローチを順番に見ていきましょう。 アプローチ1:素朴な全走査(ブルートフォース) 最も基本的な方法は、文字列を1文字ずつループで走査し、辞書を使って出現回数を記録していくやり方です。すでに辞書に存在する文字であればカウントを1増やし、初めて登場した文字であれば新しくキーとして追加します。 コード例 test_str = Tutorialspoint # カウント用の