如何将 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.hppboost/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 //#include using namespace std; #define ll long long #define mod 10000007 const int mx=100; int main() ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", 标准输出); #endif 字符串 str; cin >> str; str[0] = toupper(str[0]); cout 您的示例有效,因为您使用全小写单词来测试它。用问题中的例子(“eXampLe”)试试,你会明白我的意思:-) 它仍然有效!你是在电脑上编译的。请尝试!我刚刚做了,它适用于给定的单词:“eXampLE”。 要求“其余的小写字母”,而不是“字符串的其余部分保持不变”...

以上是关于如何将 C++ 字符串中的单词大写?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式,将字符串中的每个单词首字母大写

如何将我从外部文件中的函数获得的字符串转换为全部大写[重复]

如何大写字符串中每个单词的第一个字符

如何使用 JavaScript 将字符串中每个单词的首字母大写?

text JS - 将字符串中的所有单词大写

Java如何将每个单词的第一个字符转为大写?