Как сделать заглавным слово в строке C++?
У меня есть std::string и я хочу, чтобы первая буква была заглавной, а остальные строчные.
Один из способов сделать это:
const std::string example("eXamPLe");
std::string capitalized = boost::to_lower_copy(example);
capitalized[0] = toupper(capitalized[0]);
Который даст capitalized
как:
"Пример"
Но, возможно, есть более прямой способ сделать это?
1 ответ
Если строка действительно просто одно слово, std::string capitalized = boost::locale::to_title (example)
должен сделать это. В противном случае то, что у вас есть, довольно компактно.
Изменить: только что заметил, что boost::python
Пространство имен имеет str
класс с capitalize()
метод, который звучит так, как будто он будет работать для строк из нескольких слов (при условии, что вы хотите то, что вы описали, а не регистр заголовка). Однако использование строки Python только для получения этой функциональности, вероятно, является плохой идеей.
Решение без наддува:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
const std::string example("eXamPLe");
std::string s = example;
s[0] = toupper(s[0]);
std::transform(s.begin()+1, s.end(), s.begin()+1, tolower);
std::cout << s << "\n";
}
Я думаю, что имя строковой переменной - это пример, а хранимая в нем строка - это "пример". Так что попробуйте это:
example[0] = toupper(example[0]);
for(int i=1 ; example[i] != '\0' ; ++i){
example[i] = tolower(example[i]);
}
cout << example << endl;
Это может дать вам первый символ ЗАГЛАВНЫМ, а остальная часть строки станет строчной. Это не сильно отличается от оригинального решения, это просто другой подход.