1. ホーム
  2. c++

[解決済み] std::stringのインスタンスを小文字に変換する方法

2022-03-20 03:39:18

質問

を変換したい。 std::string を小文字に変換します。私は、関数 tolower() . しかし、過去にこの関数で問題が発生したことがあり、また、この関数を std::string を使用すると、各文字を繰り返し処理する必要があります。

100%の確率で動作する代替案はありますか?

解決方法は?

を参考にしました。 よくある質問 :

#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のようなマルチバイトエンコーディングを使用している場合、不向きです。