C++で文字列全体や一部の文字だけを大文字や小文字に変換する方法が分からなかったため、調べてまとめました。




一文字だけ変換する場合


単純に大文字への変換にはstd::toupper、小文字への返還にはstd::tolowerを使うのが楽そう。


#include <iostream>
#include <string>
using namespace std;

int main(){
	    string S1 = "abcdef";
	    string S2 = "ABCDEF";

	    // 大文字への変換
	    S1[1] = toupper(S1[1]);
	    cout << S1 << endl;

	    // 小文字への変換
	    S2[1] = tolower(S2[1]);
	    cout << S2 << endl;

	    return 0;
}




文字列全体を変換する場合


std::transformと先ほど使用したstd::toupperstd::tolowerを合わせて使うのが良いみたい。

transform関数の引数は
第1引数:変換する要素の先頭
第2引数:変換する要素の終端
第3引数:コピー先の先頭
第4引数:関数オブジェクト
となっているみたいです。文字の変換以外にも使えるみたいだが、引数が多くて結構複雑な関数な気がする。


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(){
	    string S1 = "abcdef";
	    string S2 = "ABCDEF";

	    // 大文字への変換
	    transform(S1.begin(), S1.end(), S1.begin(), ::toupper);
	    cout << S1 << endl;

	    // 小文字への変換
	    transform(S2.begin(), S2.end(), S2.begin(), ::tolower);
	    cout << S2 << endl;

	    return 0;
}



複数文字を変換する場合


文字列全体ではないが複数の文字を変換したい場合もstd::transformを使えば変換できます。

先ほどのコードから第1引数と第2引数で変換したい範囲に変更し、第3引数は第1引数と同じ値にするだけ。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(){
	    string S1 = "abcdef";
	    string S2 = "ABCDEF";

	    // 1文字目から3文字目までを大文字へ変換
	    transform(S1.begin(), S1.begin()+3, S1.begin(), ::toupper);
	    cout << S1 << endl;

	    // 2文字目から4文字目を小文字へ変換
	    transform(S2.begin()+1, S2.begin()+4, S2.begin()+1, ::tolower);
	    cout << S2 << endl;

	    return 0;
}