5

std :: stringがあり、最初の文字を大文字にし、残りを小文字にすることを望みます。

これを行う1つの方法は次のとおりです。

const std::string example("eXamPLe");
std::string capitalized = boost::to_lower_copy(example);

capitalized[0] = toupper(capitalized[0]);

これは次capitalizedのようになります:

"例"

しかし、おそらくこれを行うためのより簡単な方法がありますか?

4

3 に答える 3

6

文字列が実際に1つの単語である場合は、std::string capitalized = boost::locale::to_title (example)それを実行する必要があります。そうでなければ、あなたが持っているものはかなりコンパクトです。

boost::python編集:名前空間に、複数の単語の文字列で機能するように聞こえるメソッドを持つstrクラスがあることに気づきましたcapitalize()(タイトルの大文字小文字ではなく、説明した内容が必要であると想定しています)。ただし、その機能を取得するためだけにPython文字列を使用することは、おそらく悪い考えです。

于 2013-03-12T19:23:36.270 に答える
0

文字列変数名はexampleであり、そこに格納されている文字列は「example」だと思います。 だからこれを試してみてください:

example[0] = toupper(example[0]);
for(int i=1 ; example[i] != '\0' ; ++i){
        example[i] = tolower(example[i]);
        }

cout << example << endl;

これにより、最初の文字がCAPITALIZEDになり、残りの文字列が小文字になります。元のソリューションとまったく違いはありませんが、アプローチが異なります。

于 2020-07-13T20:05:50.337 に答える
0

ブーストレスソリューションは次のとおりです。

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    const std::string example("eXamPLe");

    std::string s = example;    
    s[0] = toupper(s[0]);
    std::transform(s.begin()+1, s.end(), s.begin()+1, tolower);
    
    std::cout << s << "\n";
}
于 2020-07-13T21:55:09.687 に答える