std::string のインスタンスを小文字に変換する方法 質問する

std::string のインスタンスを小文字に変換する方法 質問する

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 のようなマルチバイト エンコーディングを使用している場合は、多くのスクリプトには適さないことに注意してください。

おすすめ記事