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

Convert first letter in string to uppercase

本文关键字:转换 大写字母 第一个 字符串      更新时间:2023-10-16

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

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

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

string str = "something";
str[0] = toupper(str[0]);

这就是你所需要做的。

就像Carneigie说的,

string str = "something";
str[0] = toupper(str[0]);

,但也要记住:

#include <string>
#include <cctype>

一直往上

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

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

为了说明它有多复杂,考虑以下英语中的情况。将三个码点序列'file'(使用f-i连接)转换为第一个码点分成两个独立的字母,从而产生'file'。请注意,用于进行大小写分类和转换的标准C/c++接口没有考虑到这些情况,因此甚至不可能实现它们以正确支持Unicode。
#include <iostream>
using namespace std;
void capitalize (string &s)
{
    bool cap = true;
    for(unsigned int i = 0; i <= s.length(); i++)
    {
        if (isalpha(s[i]) && cap == true)
        {
            s[i] = toupper(s[i]);
            cap = false;
        }
        else if (isspace(s[i]))
        {  
            cap = true;
        }
    }
}

(仅适用于'ASCII'字符)

std::wstring s = L"apple";
if(islower(s.at(0) <= 'z' ? s.at(0) : 'A'))
    s[0] += 'A' - 'a';

或者,如果你觉得很花哨,想折磨你的代码的未来读者:

std::wstringstream wss;
wss << std::uppercase   << s[0]
    << std::nouppercase << s.substr(1);
wss >> s;