C++で文字列の大文字と小文字を反転させる方法
任意の長さの文字列が与えられ、その文字列に含まれる大文字を小文字へ、小文字を大文字へ変換するのが課題です。この処理は「ケース(大小文字)の反転」と呼ばれ、C++ではいくつかの方法で実装できます。
例
入力 − string str = "Welcome To The Site!"
出力 − wELCOME tO tHE sITE!
解説 − 大文字の W、T、T、S を小文字に変換し、小文字の e、l、c、o、m、e、o、i、t、e を大文字に変換します。記号や特殊文字(!など)には何も操作を行いません。
入力 − string str = "HELLO"
出力 − hello
解説 − 大文字の H、E、L、L、E をすべて小文字に変換します。
実現できる2つのアプローチ
C++標準ライブラリが提供する組み込み関数
tolower(char)やtoupper(char)(<cctype>ヘッダ)を使用する方法。ASCIIコードの性質を利用したロジックを自前で実装する方法(以下のプログラムで紹介)。
プログラムで使用するアプローチの手順
任意の長さの文字列を入力として受け取ります。
length()関数を使って文字列の長さを取得します。この関数は、空白も含めた文字数を整数値として返します。ASCIIコードでは、大文字 [A-Z] は 65〜90、小文字 [a-z] は 97〜122 の範囲に割り当てられています。両者の差はちょうど32です。
ループを使って文字列内の各文字を判定します。文字が小文字(a〜z)であれば32を引いて大文字に変換し、大文字(A〜Z)であれば32を加えて小文字に変換します。
変換後の文字列を出力します。
サンプルコード
#include<iostream>
using namespace std;
void Convert_case(string &str){
// 文字列の長さを計算
int len = str.length();
// 小文字を大文字へ、大文字を小文字へ変換
for (int i=0; i<len; i++){
if (str[i]>='a' && str[i]<='z'){
str[i] = str[i] - 32;
}
else if(str[i]>='A' && str[i]<='Z'){
str[i] = str[i] + 32;
}
}
}
int main(){
string str = "What's Your Name?";
cout<<"String before conversion is: "<<str;
Convert_case(str);
cout<<"\nString after conversion is: "<<str;
return 0;
}出力結果
上記のコードを実行すると、次のような出力が得られます −
String before conversion is − What's Your Name? String after conversion is − wHAT'S yOUR nAME?
補足:組み込み関数を使った別の書き方
同じ処理は、<cctype> ヘッダの toupper() / tolower() を使うことでより簡潔に記述できます。
#include<iostream>
#include<cctype>
using namespace std;
void Convert_case(string &str){
for (char &c : str){
if (islower(c)){
c = toupper(c);
}
else if (isupper(c)){
c = tolower(c);
}
}
}この方法なら、ASCIIコードの数値を意識せずに可読性の高いコードを書けます。なお、どちらの方法でも英字以外の文字(数字・記号・空白など)はそのまま維持されます。
-
Javaで文字列を文字のリスト(List<Character>)に変換する方法
Javaでは、chars()メソッドとStream APIを組み合わせることで、文字列を簡単にList<Character>へ変換できます。この記事では、その具体的な手順をサンプルコード付きで解説します。 変換の基本アプローチ まず、変換対象となる文字列を用意します。 String str = Website!; この文字列を文字のリストに変換するには、以下のように記述します。 List<Character> list = str.chars().mapToObj(n -> (char)n).collect(Collectors.toList()); 処理の流れを
-
Javaで文字(Character)のリストを文字列に変換する方法
Javaでは、Stream APIとCollectors.joining()を組み合わせることで、文字(Character)のリストを簡単に1つの文字列へ変換できます。この記事では、その基本的な手順とサンプルコードをわかりやすく解説します。 変換の手順 まず、次のような文字のリストがあったとします。 List<Character> list = Arrays.asList(W, e, l, c, o, m, e); このリストを文字列に変換するには、以下のようにstream()、map()、Collectors.joining()を使用します。 String string = li