Ответ 1
string str = "something";
str[0] = toupper(str[0]);
Это все, что вам нужно сделать. Он также работает для строк C.
У меня есть строка: "apple"
. Как преобразовать только первый символ в верхний регистр и получить новую строку в форме "apple"
?
У меня также может быть строка с многобайтовыми символами.
Что делать, если первый символ строки является многобайтовым символом?
string str = "something";
str[0] = toupper(str[0]);
Это все, что вам нужно сделать. Он также работает для строк C.
Я не могу использовать str [0], потому что у меня может быть строка с многобайтовыми символами
Я не знаю никакой реализации CRT, которая поддерживает классификацию и преобразование символов, отличных от ASCII. Если вы хотите поддерживать Unicode, то все намного сложнее, поскольку "преобразование первого символа в верхний регистр" может быть бессмысленным на других языках. Вы должны использовать Unicode library, написанную экспертами для этого.
Чтобы проиллюстрировать, насколько это сложно, рассмотрите следующий случай на английском языке. Преобразование трех кодовой последовательности "fi" (с f-i-лигатурой) должно разбить первый код на два отдельных письма, в результате чего "Файл". Обратите внимание, что стандартные интерфейсы C/С++ для классификации и преобразования случаев не учитывают такие случаи, поэтому их даже невозможно реализовать для правильной поддержки Unicode.
Как то, что сказал Карнейджи,
string str = "something";
str[0] = toupper(str[0]);
но также помните:
#include <string>
#include <cctype>
до конца
(работает только с символами 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;
#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;
}
}
}