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

时间:2011-12-16 06:22:16

标签: c++ string mbcs

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

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

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

5 个答案:

答案 0 :(得分:40)

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

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

答案 1 :(得分:7)

  

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

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

为了说明它有多复杂,请在英语中考虑以下情况。转换三个代码点序列'fi le'(带有fi ligature)将第一个代码点分解为两个单独的字母,从而产生'File' 。请注意,用于进行案例分类和转换的标准C / C ++接口不会考虑这些情况,因此甚至无法实现它们以正确支持Unicode。

答案 2 :(得分:6)

就像卡内基所说的那样,

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

但还记得:

#include <string>
#include <cctype>

一路上升

答案 3 :(得分:3)

(仅适用于'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;

答案 4 :(得分:3)

#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;
        }
    }
}