2017-10-31 9 views
1

文字列の1つのベクトルを使用していますが、文字列は小文字ではありません。私はそれらを小文字に変換して欲しい。小文字の文字列ベクトルの要素

文字列を小文字に変換するには、次の方法を使用しています。

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

私は上記のように、この目的のために利用可能な任意のライブラリ関数があるベクトルを反復処理し、各文字列を変換するが、私は知りたいのですができます。新しいベクターにもうまくコピーできます。

std::vector<std::string> v1; 
v1.push_back("ABC"); 
v1.push_back("DCE"); 

std::vector<std::string> v2(v1.begin(), v1.end()); 
+0

見てください。 https://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower-case –

+0

@AditiRawatによって提案されたリンクを参照して、 'の:: tolower'ご使用は未定義**であることに注意してくださいビヘイビア**非ASCII-7入力。個人的には、ASCII-7を超えてテキストを処理する可能性がある場合は、 '' std :: string''(https://stackoverflow.com/a/24063783/60281)を使用しないことをお勧めします。 – DevSolar

+0

'std :: string'に格納した文字列によって使用される_encoding_を明確にする必要があります。純粋なASCII **(7ビット)文字列ですか? ** UTF-8 **を使用していますか?またはいくつかの他の**コードページ**?既に書かれているように、 'tolower'は純粋なASCII文字列に対してのみ動作することが保証されています。 @DevSolar [この回答では](https://stackoverflow.com/a/24063783/1629821)は、Unicode **の有効な代替案を提案しています。 –

答えて

1

std::transformには、ラムダ、

std::vector<std::string> v1; 
v1.push_back("ABC"); 
v1.push_back("DCE"); 

std::vector<std::string> v2; 
v2.reserve(v1.size()); 

std::transform(
    v1.begin(), 
    v1.end(), 
    std::back_inserter(v2), 
    [](const std::string& in) { 
     std::string out; 
     out.reserve(in.size()); 
     std::transform(in.begin(), in.end(), std::back_inserter(out), ::tolower); 
     return out; 
    } 
); 

LIVE

関連する問題