STLを使って文字列を小文字化


このエントリーをはてなブックマークに追加

std::transform(str.begin(), str.end(), str.begin(), ::tolower);

というのを使うと一行で書けるらしい。

#include <algorithm>
#include <iostream>
#include <string>
int main(){
    std::string data = "jAnUaRY";
    std::cout << data << std::endl;
    // 文字列中のすべての大文字を小文字に変換
    std::transform(data.begin(), data.end(), data.begin(), ::tolower);
    std::cout << data << std::endl;
    return 0;
}

出力はこうなる。

jAnUaRY
january

transformの第4引数を自分で書く場合は以下のようになるらしい。

char easytolower(char in){
  if(in<='Z' && in>='A')
    return in-('Z'-'z');
  return in;
} 

std::transform(data.begin(), data.end(), data.begin(), easytolower);