我有一个 std::string 并希望第一个字母大写,其余小写。
我可以这样做的一种方法是:
const std::string example("eXamPLe");
std::string capitalized = boost::to_lower_copy(example);
capitalized[0] = toupper(capitalized[0]);
这将产生capitalized
:
“例子”
但也许有更直接的方法可以做到这一点?
我有一个 std::string 并希望第一个字母大写,其余小写。
我可以这样做的一种方法是:
const std::string example("eXamPLe");
std::string capitalized = boost::to_lower_copy(example);
capitalized[0] = toupper(capitalized[0]);
这将产生capitalized
:
“例子”
但也许有更直接的方法可以做到这一点?
如果字符串确实只是一个单词,std::string capitalized = boost::locale::to_title (example)
应该这样做。否则,您所拥有的将非常紧凑。
编辑:刚刚注意到boost::python
命名空间有一个str
类,它的capitalize()
方法听起来像是适用于多字串(假设你想要你所描述的而不是标题大小写)。然而,仅仅为了获得该功能而使用 python 字符串可能不是一个好主意。
我认为字符串变量名称是示例,其中存储的字符串是“示例”。 所以试试这个:
example[0] = toupper(example[0]);
for(int i=1 ; example[i] != '\0' ; ++i){
example[i] = tolower(example[i]);
}
cout << example << endl;
这可能会给您第一个字符大写,而字符串的其余部分变为小写。它与原始解决方案没有太大不同,只是一种不同的方法。
无升压的解决方案是:
#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";
}