C++で文字列がすべて大文字かどうかを判定する方法を解説
文字列 str に何らかの文字が含まれているとします。ここでの課題は、与えられた文字列のすべての文字が大文字であるかどうかを判定し、結果に応じて True または False を返すことです。具体的な例を見てみましょう。
入力例1:
str = "INDIA"
出力:
True
説明: 入力文字列のすべての文字が大文字であるため、この場合は true を返します。
入力例2:
str = "Programmer"
出力:
False
説明: 先頭の1文字以外は大文字ではないため、この場合は false を返します。
問題を解くためのアプローチ
この問題では、与えられた文字列のすべての文字が大文字かどうかを確認する必要があります。そこで、文字列の各文字を順番に走査し、それぞれの文字が「A」以上「Z」以下の範囲に収まっているかどうかをチェックしていきます。
条件が真であればカウンターをインクリメントします。すべての文字のチェックが完了した後、カウンターの値と文字列の長さを比較し、一致すれば true を、そうでなければ false を返します。
文字列
strを入力として受け取ります。ブール関数 checkCapital(string s) は文字列を引数として受け取り、すべての文字が大文字であれば true を返します。
カウンター変数を用意し、0 で初期化します。
文字列を走査し、現在の文字が「A」から「Z」の範囲内にあるかを確認します。条件が真であればカウンター変数をインクリメントします。
最後に、カウンターの値が文字列のサイズと一致しているかを確認し、それに応じて True / False を返します。
カウンターが 0(すべて小文字)の場合や、大文字が先頭の1文字だけの場合(例:「Hello」のような形式)も true を返します。
コード例
#include<bits/stdc++.h>
using namespace std;
bool checkCapital(string s){
int counter = 0;
int loc = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] >= 'A' && s[i] <= 'Z'){
counter++;
loc = i;
}
}
if(counter == s.size() || counter == 0 || (counter == 1 && loc == 0))
return true;
return false;
}
int main(){
string str = "INDIA";
bool ans = checkCapital(str);
if(ans){
cout << "True" << endl;
} else {
cout << "False" << endl;
}
return 0;
}
出力
上記のコードを実行すると、次の出力が得られます。
True
入力文字列「INDIA」のすべての文字が大文字であるため、出力は「True」となります。
-
C++を使って文字列から特定の単語を削除する方法
本記事では、与えられた文字列から指定した単語を削除する問題を解説します。まず、具体的な例を見てみましょう。入力 : str = remove a given word, word = remove 出力 : a given word 入力 : str = god is everywhere, word = is 出力 : god everywhere解決のためのアプローチ文字列から特定の単語を削除するには、シンプルな手法を用いることができます。手順は以下の通りです。まず、与えられた文字列を2次元配列(マトリックス)形式に変換し、各行に1つの単語を格納します。マトリックス内から対象の単語を検索
-
C++で文字列の部分文字列の総数を求める方法を解説
この記事では、与えられた文字列から作成できる空でない部分文字列の個数を求める方法について解説します。入力 : string = "moon" 出力 : 10 説明 : 部分文字列は m、o、o、n、mo、oo、on、moo、oon、moon の 10 個です。 入力 : string = "yellow" 出力 : 21解法のアプローチ文字列の長さを n とします。上の例からも分かるように、考えられるすべての部分文字列の個数を求めるには、長さ n、(n-1)、(n-2)、(n-3)、……2、1 の部分文字列の個数を順に加算していく必要があります。部分文