将字符串中的第一个字母转换为大写

use*_*276 22 c++ string mbcs

我有一个字符串:"apple".如何只将第一个字符转换为大写并获取一个新的字符串形式"Apple"?

我也可以有一个包含多字节字符的字符串.

如果字符串的第一个字符是多字节字符怎么办?

Set*_*gie 44

string str = "something";
str[0] = toupper(str[0]);
Run Code Online (Sandbox Code Playgroud)

这就是你需要做的.它也适用于C字符串.

  • @Nawaz 不是那样,因为这会修改 const char[9] (在内存中你无法修改)。但如果你拥有的某个内存中有一个 C 字符串,那么它就会起作用。 (2认同)

ybu*_*ill 7

我不能使用str [0],因为我可以拥有多字节字符的字符串

我不知道任何支持非ASCII字符分类和转换的CRT实现.如果你想支持Unicode,那么一切都要复杂得多,因为"将第一个字符转换为大写字母"在其他语言中可能毫无意义.您必须使用专家编写的Unicode库.

为了说明它有多复杂,请考虑以下英语案例.转换的3个点序列"网络文件"(具有f结扎)应打破第一码点到2个致使"文件"单独字母.请注意,用于进行案例分类和转换的标准C/C++接口不会考虑这些情况,因此甚至无法实现它们以正确支持Unicode.


HoK*_*y22 6

就像卡内基所说的那样,

string str = "something";
str[0] = toupper(str[0]);
Run Code Online (Sandbox Code Playgroud)

还记得:

#include <string>
#include <cctype>
Run Code Online (Sandbox Code Playgroud)

一路攀升


Mat*_*haq 3

(仅适用于“ASCII”字符。)

std::wstring s = L"apple";

if(islower(s.at(0) <= 'z' ? s.at(0) : 'A'))
    s[0] += 'A' - 'a';
Run Code Online (Sandbox Code Playgroud)

或者,如果您感觉很奇特并且想折磨您代码的未来读者:

std::wstringstream wss;
wss << std::uppercase   << s[0]
    << std::nouppercase << s.substr(1);
wss >> s;
Run Code Online (Sandbox Code Playgroud)

  • 花哨的形式相当丑陋且缓慢。最好警告他不要这样做。 (3认同)