如何将 C++ 字符串中的单词大写?
Posted
技术标签:
【中文标题】如何将 C++ 字符串中的单词大写?【英文标题】:How to capitalize a word in a C++ string? 【发布时间】:2013-02-28 11:29:09 【问题描述】:我有一个 std::string 并希望第一个字母大写,其余小写。
我可以这样做的一种方法是:
const std::string example("eXamPLe");
std::string capitalized = boost::to_lower_copy(example);
capitalized[0] = toupper(capitalized[0]);
这将产生capitalized
:
“示例”
但也许有更直接的方法可以做到这一点?
【问题讨论】:
我认为这是最简单的方法。 您的方法看起来很简单。您想避免使用 boost 吗? Boost 很好,只是觉得可能有一个函数可以一次完成所有操作。 我不明白为什么这不算简单。您甚至不必为此使用 jQuery。 你知道,如果你最终不得不经常这样做,你可能只想把这个过程包装在一个方法'capitalize(std::string)'中。我认为目前还没有一种方法可以做到这一点......不过可能是错误的。 【参考方案1】:如果字符串确实只是一个单词,std::string capitalized = boost::locale::to_title (example)
应该这样做。否则,你得到的东西是相当紧凑的。
编辑:刚刚注意到 boost::python
命名空间有一个带有 capitalize()
方法的 str
类,听起来它适用于多字串(假设你想要你所描述的而不是标题大小写)。然而,仅仅为了获得该功能而使用 python 字符串可能是个坏主意。
【讨论】:
boost::locale
的头文件是#include <boost/locale.hpp>
@WilliamKF 是的,很抱歉没有指出这一点。另外,我知道您并不关心国际化,但对于任何关心国际化的人,请注意这可能会在不同的语言环境中产生不同的结果(同样的警告适用于原始代码 sn-p)
我没有在我的构建中找到boost/locale.hpp
,其中存在boost/lambda/lambda.hpp
和boost/algorithm/string.hpp
等其他标头。这是否意味着我有一个旧版本的 boost 或只有一个没有安装所有部件?
你有什么版本的 boost?根据历史,语言环境库是在 1.48.0(2011 年 11 月 15 日发布)中引入的。自上个月以来一直有更新,因此更新是个好主意。【参考方案2】:
无升压的解决方案是:
#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";
【讨论】:
【参考方案3】:我认为字符串变量名是example,其中存储的字符串是“example”。 所以试试这个:
example[0] = toupper(example[0]);
for(int i=1 ; example[i] != '\0' ; ++i)
example[i] = tolower(example[i]);
cout << example << endl;
这可能会给您第一个字符大写,而字符串的其余部分变为小写。 它与最初的解决方案并没有太大的不同,只是一种不同的方法。
【讨论】:
这确实会将第一个字母大写,但其余部分保持不变。如果您阅读该问题,您会发现他们希望第一个字母为大写,其余字母为小写。由于你不能假设其他字母是小写的,所以答案是不正确的。 我猜你的逻辑不正确。尝试编译以下程序,您可以自己查看结果。 #include以上是关于如何将 C++ 字符串中的单词大写?的主要内容,如果未能解决你的问题,请参考以下文章
如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]