it-swarm-pt.tech

Converter a primeira letra da string em maiúsculas

Eu tenho uma string: "Apple". Como posso converter apenas o primeiro caractere em maiúsculas e obter uma nova string na forma de "Apple"?

Também posso ter uma sequência com caracteres multibyte.

E se o primeiro caractere da string for um caractere multibyte?

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

É tudo o que você precisa fazer. Também funciona para seqüências C.

43
Seth Carnegie

Não posso usar str [0] porque, posso ter uma string com caracteres multibyte

Não conheço nenhuma implementação de CRT que suporte classificação e conversão de caracteres não ASCII. Se você deseja oferecer suporte ao Unicode, tudo fica muito mais complicado, já que "converter o primeiro caractere em maiúsculas" pode não ter sentido em outros idiomas. Você precisa usar um biblioteca Unicode escrito por especialistas para isso.

Para ilustrar como é complicado, considere o seguinte caso em inglês . A conversão do (arquivo) sequência de pontos de código três (com ligadura fi) deve quebrar o primeiro ponto de código em duas letras separadas, resultando em 'Arquivo'. Observe que as interfaces C/C++ padrão para realizar classificação e conversão de casos não levam esses casos em consideração; portanto, é impossível implementá-los para oferecer suporte ao Unicode corretamente.

7
ybungalobill

Como o que Carneigie disse,

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

mas lembre-se também de:

#include <string>
#include <cctype>

todo o caminho

6
HoKy22

(Funciona apenas com caracteres 'ASCII'.)

std::wstring s = L"Apple";

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

Ou se você estiver com vontade de torturar futuros leitores do seu código:

std::wstringstream wss;
wss << std::uppercase   << s[0]
    << std::nouppercase << s.substr(1);
wss >> s;
3
Mateen Ulhaq
#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;
        }
    }
}
3
Rye Bryant