C++のstd::transform()の引数

transform(文字列の始点, 文字列の終点, 変換した文字列を代入する始点, 大文字or小文字, よく分からない)

 

目的

与えられたアルファベット文字列の一部の大文字/小文字を変換したい.
具体的には,B: 名前の確認 - AtCoder Beginner Contest 011 | AtCoder

 

プログラム

#include <iostream>
#include <string>
#include <algorithm>


using namespace std;


int main()
{
    string S;
    cin >> S;


    transform(S.begin(), S.begin()+1, S.begin(), ::toupper);
    transform(S.begin()+1, S.end(), S.begin()+1, ::tolower);
    

    cout << S << endl;


    return 0;
}

 

入出力

abcd #入力
Abcd #出力

 

まとめ

include

transform(begin, end, dst_begin, ::toupper/::tolower, よく分からない)

beginからendまでを変換する.
変換した文字列はdst_begin以降に代入される.たぶん別の変数でもOK.
::toupper/::tolowerどちらかで大文字/小文字の指定.
よく分からないやつはよく分からない(数値を与えて,その数値を引くっぽい?).

つまり,変換してそのまま置換するなら,beginとdst_beginが一致する.

 

追記

手元だと,toupper/tolowerで動いたけれど,AtCoderではCEしたので調べたところ,名前空間の問題が発生するらしい.
参考:Free Dynamic DNS(DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, VPS | MyDNS.JP