a を小文字に変換したいですstd::string
。関数 は知っていますtolower()
。しかし、過去にこの関数で問題が発生したことがあり、この関数を a で使用するとstd::string
各文字を反復処理する必要があるため、理想的とは言えません。
100% 確実に機能する代替手段はありますか?
ベストアンサー1
出典:あまり聞かれない質問:
#include <algorithm>
#include <cctype>
#include <string>
std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(),
[](unsigned char c){ return std::tolower(c); });
各文字を反復処理しなければ、実際にはうまくいきません。そうしないと、文字が小文字か大文字かを知る方法がありません。
本当に嫌いならtolower()
、ここでは ASCII のみに特化した代替手段を示しますが、使用することはお勧めしません。
char asciitolower(char in) {
if (in <= 'Z' && in >= 'A')
return in - ('Z' - 'z');
return in;
}
std::transform(data.begin(), data.end(), data.begin(), asciitolower);
tolower()
では 1 バイト文字単位の置換しか実行できないため、特に UTF-8 のようなマルチバイト エンコーディングを使用している場合は、多くのスクリプトには適さないことに注意してください。