C++で文字列内の最大・最小のASCII値を持つ文字を検索するプログラム
問題概要
この問題では、1つの文字列が与えられます。私たちのタスクは、C++を使って、文字列内のASCII値が最も大きい文字と最も小さい文字を検索するプログラムを作成することです。
コードの説明 − ここでは、大文字と小文字の両方を含む文字列が与えられており、その中からASCII値が最大の文字と最小の文字を見つけ出す必要があります。
問題を理解するために、具体的な例を見てみましょう。
入力
str = "TutorialsPoint"
出力
Largest = u、Smallest = P
説明
ASCII値の規則では、大文字は小文字よりも小さい値を持ちます。
したがって、大文字の中で最小の「A」が文字列全体でも最小のASCII値となり、小文字の中で最大の「z」が全体でも最大のASCII値となります。この例の場合、「TutorialsPoint」に含まれる大文字の中で最小は「P」、小文字の中で最大は「u」であるため、出力は上記のようになります。
解決アプローチ
最もシンプルな方法は、文字列を先頭から末尾まで直接走査し、各文字のASCII値を比較しながら最大文字と最小文字を求めることです。
C++では、char型同士の比較はそのままASCII値の比較として機能するため、「A」や「z」などの文字リテラルとの大小比較を利用できます。
アルゴリズムの手順
- 文字列の最初の文字を、暫定の最大文字(maxChar)と最小文字(minChar)として初期化します。
- 文字列を1文字ずつ走査し、現在の文字がmaxCharより大きければmaxCharを更新します。
- 同様に、現在の文字がminCharより小さければminCharを更新します。
- 走査が完了した時点のmaxCharとminCharが、それぞれASCII値の最大・最小の文字となります。
このソリューションの動作を示すプログラムは以下の通りです。
実装例
#include <iostream>
using namespace std;
void findMaxMinAlphabet(char str[], int n){
char maxChar = str[0];
char minChar = str[0];
for(int i = 0; i < n - 1; i++){
if (str[i] > maxChar)
maxChar = str[i];
if(minChar > str[i])
minChar = str[i];
}
cout<<"Maximum Alphabet: "<<maxChar<<"\nMinimum Alphabet: "<<minChar;
}
int main() {
char a[]= "TutorialsPoint";
int size = sizeof(a) / sizeof(a[0]);
findMaxMinAlphabet(a, size);
return 0;
}
出力
Maximum Alphabet: u Minimum Alphabet: P
補足:STLを活用した別の書き方
C++では、標準ライブラリのstd::max_elementやstd::min_elementを使えば、同様の処理をより簡潔に記述することも可能です。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string str = "TutorialsPoint";
char maxChar = *max_element(str.begin(), str.end());
char minChar = *min_element(str.begin(), str.end());
cout << "Maximum Alphabet: " << maxChar << endl;
cout << "Minimum Alphabet: " << minChar << endl;
return 0;
}
どちらの方法でも計算量はO(n)であり、文字列の長さに比例して処理時間が増加します。学習目的ではループによる実装を理解しておくことが重要ですが、実務ではSTLを活用した簡潔な記述が推奨されます。
-
C++で文字列内の文字の出現頻度を求めるプログラム
文字列と文字の頻度とは文字列とは、NULL文字(\0)で終端される1次元の文字配列のことです。文字列における「文字の頻度」とは、特定の文字がその文字列の中に何回出現するかを表す数値です。例えば、以下のようになります。文字列: Football is a sport上記の文字列に含まれるアルファベット「o」の頻度は3特定の文字の頻度を求めるプログラム特定のアルファベットの出現回数を求めるプログラムは、以下のとおりです。例#include <iostream>using namespace std;int main() { char str[100]
-
C++で文字列の長さを求める方法:基本テクニックとstrlen()関数の使い方
C++における文字列とは、ヌル文字(\0)で終端される1次元の文字配列のことです。文字列の長さとは、このヌル文字より前に存在する文字数を指します。例えば、次のような文字列を考えてみましょう。char str[] = The sky is blue; 上記の文字列に含まれる文字数 = 15それでは、文字列の長さを求めるプログラムを見ていきましょう。例1:whileループを使って文字数をカウントする方法#include<iostream> using namespace std; int main() { char str[] = Apple; &n