2013-03-12 87 views
2

我有一個std :: string,希望第一個字母大寫,其他小寫。我能做到這一點如何在C++字符串中大寫一個單詞?

一種方法是:

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

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

這將產生capitalized爲:

「示例」

但也許還有一個更直接的方式來做這個?

+0

我認爲這是最簡單的方法。 – evanmcdonnal 2013-03-12 19:04:11

+0

你的方法看起來很直接,因爲它是。你想避免使用提升? – souldzin 2013-03-12 19:04:24

+0

Boost很好,只是認爲可能有一個功能可以一次完成所有功能。 – WilliamKF 2013-03-12 19:04:50

回答

3

如果字符串確實只是一個單詞,std::string capitalized = boost::locale::to_title (example)應該這樣做。否則,你得到的是非常緊湊的。

編輯:剛纔注意到boost::python命名空間有一個str類與capitalize()方法,這聽起來像它會多字字符串的工作(假設你想你所描述的,而不是所有權的情況下)。然而,使用python字符串來獲得該功能可能是一個糟糕的主意。

+1

'boost :: locale'的頭文件是'#include ' – WilliamKF 2013-03-12 19:38:19

+0

@WilliamKF是的,抱歉沒有指出。另外,我知道你並不關心國際化,但是對於任何人來說,要注意的是,這可以在不同的語言環境中給出不同的結果(並且同樣的警告適用於原始代碼段) – jerry 2013-03-12 19:42:30

+0

我沒有發現'boost/locale.hpp'在我的構建中,其他頭文件像'boost/lambda/lambda.hpp'和'boost/algorithm/string.hpp'存在。這是否意味着我有一箇舊版本的升壓或只有一個沒有安裝所有部件? – WilliamKF 2013-03-12 19:46:35

相關問題