C++
 Computer >> コンピューター >  >> プログラミング >> C++

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コードの数値を意識せずに可読性の高いコードを書けます。なお、どちらの方法でも英字以外の文字(数字・記号・空白など)はそのまま維持されます。

  1. Javaで文字列を文字のリスト(List<Character>)に変換する方法

    Javaでは、chars()メソッドとStream APIを組み合わせることで、文字列を簡単にList<Character>へ変換できます。この記事では、その具体的な手順をサンプルコード付きで解説します。 変換の基本アプローチ まず、変換対象となる文字列を用意します。 String str = Website!; この文字列を文字のリストに変換するには、以下のように記述します。 List<Character> list = str.chars().mapToObj(n -> (char)n).collect(Collectors.toList()); 処理の流れを

  2. 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