una regular primera poner palabra mayusculas mayuscula letra expresion convertir cadena cada c++ string mbcs

c++ - regular - Convertir la primera letra en cadena a mayúsculas



primera letra de cada palabra en mayuscula c++ (5)

Tengo una cadena: "apple" . ¿Cómo puedo convertir solo el primer carácter a mayúsculas y obtener una nueva cadena en forma de "Apple" ?

También puedo tener una cadena con caracteres multibyte.

¿Qué pasa si el primer carácter de la cadena es un carácter multibyte?


No puedo usar str [0] porque puedo tener una cadena que tiene caracteres multibyte

No conozco ninguna implementación de CRT que admita la clasificación y conversión de caracteres que no sean ASCII. Si desea admitir Unicode, entonces todo es mucho más complicado, ya que "convertir el primer carácter a mayúsculas" puede no tener sentido en otros idiomas. Tienes que usar una biblioteca Unicode escrita por expertos para esto.

Para ilustrar lo complicado que es, considere el siguiente caso en inglés . La conversión de la secuencia de tres puntos de código ''archivo'' (con la ligadura) dividirá el primer punto de código en dos letras separadas que resulten en ''Archivo''. Tenga en cuenta que las interfaces C / C ++ estándar para realizar la clasificación y conversión de casos no tienen en cuenta dichos casos, por lo que es incluso imposible implementarlos para que sean compatibles con Unicode correctamente.


(Solo funciona con caracteres ''ASCII'').

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

O si te sientes elegante y quieres torturar a cualquier futuro lector de tu código:

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


Como lo que dijo Carneigie,

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

pero también recuerda:

#include <string> #include <cctype>

todo el camino hasta


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


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

Eso es todo lo que necesitas hacer. También funciona para cuerdas C.