Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Primera letra de cada palabra en mayúscula (String)

Estas en el tema de Primera letra de cada palabra en mayúscula (String) en el foro de C/C++ en Foros del Web. [Qt 5.2 - Mac OSX - C++] Hola, Llevo toda la tarde (y se ma ha hecho de noche) probando todo lo que he encontrado ...
  #1 (permalink)  
Antiguo 08/03/2014, 15:38
Avatar de AlmaVagabunda  
Fecha de Ingreso: noviembre-2011
Ubicación: San Juan De Alicante, Valenciana, Spain, Spain
Mensajes: 20
Antigüedad: 12 años, 5 meses
Puntos: 1
Primera letra de cada palabra en mayúscula (String)

[Qt 5.2 - Mac OSX - C++]
Hola,
Llevo toda la tarde (y se ma ha hecho de noche) probando todo lo que he encontrado por la red pero no consigo solucionarlo sin meter muchas lineas de codigo.

En C++, tengo un string que lo utilizo para nombre:

Código:
cout << "Nombre: ";
        getline(is, de.nombre);
        de.nombre[0]= toupper (de.nombre[0]);//Pone la primera letra en mayusculas
        for (i = 1; i < de.nombre.length() ; i++)//Recorre el string en toda su longitud
        { de.nombre[i]= tolower (de.nombre[i]);}//A partir de la segunda letra en adelante, cambia mayusculas por minusculas si las hay
Pero si alguien introduce un nombre compuesto, la segunda palabra se me queda en minúsculas.
¿Sabeis alguna solución para el problema?

Gracias por adelantado :)
  #2 (permalink)  
Antiguo 08/03/2014, 16:11
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Primera letra de cada palabra en mayúscula (String)

Separa la oracion por palabras con los espacios y luego cambia la primera...
  #3 (permalink)  
Antiguo 08/03/2014, 21:21
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: Primera letra de cada palabra en mayúscula (String)

Tal vez algo como esto:

Código C++:
Ver original
  1. cout << "Nombre: ";
  2.         getline(is, de.nombre);
  3.         de.nombre[0]= toupper (de.nombre[0]);//Pone la primera letra en mayusculas
  4.         for (i = 1; i < de.nombre.length() ; i++)//Recorre el string en toda su longitud
  5.         {
  6.           if (de.nombre[i]!=' ')
  7.             de.nombre[i]= tolower (de.nombre[i]);
  8.           else (toupper (de.nombre[i++])
  9.           }


¡¡¡Saluditos!!!

  #4 (permalink)  
Antiguo 10/03/2014, 08:49
Avatar de AlmaVagabunda  
Fecha de Ingreso: noviembre-2011
Ubicación: San Juan De Alicante, Valenciana, Spain, Spain
Mensajes: 20
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Primera letra de cada palabra en mayúscula (String)

Cita:
Iniciado por leosansan Ver Mensaje
Tal vez algo como esto:

Código C++:
Ver original
  1. cout << "Nombre: ";
  2.         getline(is, de.nombre);
  3.         de.nombre[0]= toupper (de.nombre[0]);//Pone la primera letra en mayusculas
  4.         for (i = 1; i < de.nombre.length() ; i++)//Recorre el string en toda su longitud
  5.         {
  6.           if (de.nombre[i]!=' ')
  7.             de.nombre[i]= tolower (de.nombre[i]);
  8.           else (toupper (de.nombre[i++])
  9.           }


¡¡¡Saluditos!!!

Muchas gracias

Ese codigo es lo que buscaba jeje. Pero hay un fallo. Pone en mayusculas el siguiente a un espacio, pero despues pasa por ese caracter y lo pone en minusculas. Tengo que poner otra condicion que si el caracter anterior es un espacio no haga minusculas, pero al poner
Código:
if (de.nombre[i]!=' ' &&  de.nombre[i--]!=' ')
para que no haga mayusculas despues de una mayuscula, me hace cosas raras.
Llevo un dia raro y ahora no se como solucionar ese detalle jajaja, la cabeza esta pensando en otras cosas.
Voy a seguir viendo que tengo que retocar, pero si ves la solucion, estare muy agradecido jajaja
  #5 (permalink)  
Antiguo 10/03/2014, 09:24
Avatar de AlmaVagabunda  
Fecha de Ingreso: noviembre-2011
Ubicación: San Juan De Alicante, Valenciana, Spain, Spain
Mensajes: 20
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Primera letra de cada palabra en mayúscula (String)

Solucionado :)

Código C++:
Ver original
  1. for (i = 1; i < de.nombre.length() ; i++)//Recorre el string en toda su longitud
  2.         {
  3.             if (de.nombre[i-1]!=' '){
  4.                 de.nombre[i]= tolower (de.nombre[i]);
  5.             }else{
  6.                 de.nombre[i]=toupper (de.nombre[i]);
  7.             }
  8.         }
  #6 (permalink)  
Antiguo 06/04/2015, 01:53
 
Fecha de Ingreso: abril-2015
Mensajes: 8
Antigüedad: 9 años
Puntos: 0
Respuesta: Primera letra de cada palabra en mayúscula (String)

Cita:
Iniciado por AlmaVagabunda Ver Mensaje
Solucionado :)

Código C++:
Ver original
  1. for (i = 1; i < de.nombre.length() ; i++)//Recorre el string en toda su longitud
  2.         {
  3.             if (de.nombre[i-1]!=' '){
  4.                 de.nombre[i]= tolower (de.nombre[i]);
  5.             }else{
  6.                 de.nombre[i]=toupper (de.nombre[i]);
  7.             }
  8.         }
una pregunta....y si coloco mas espacios en blanco? ejemplo:
esto___es__un_____mensaje
Esto___Es__Un_____Mensaje
haber si pueden ayudarme
  #7 (permalink)  
Antiguo 06/04/2015, 05:59
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Primera letra de cada palabra en mayúscula (String)

Hola.
Cita:
Iniciado por JarolGarcia Ver Mensaje
una pregunta....y si coloco mas espacios en blanco? ejemplo:
esto___es__un_____mensaje
Esto___Es__Un_____Mensaje
haber si pueden ayudarme
Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. void firstUpper ( string& str ) {
  8.   str[0] = ::toupper( str[0] );
  9.   for ( string::iterator it = str.begin(); it != str.end(); it++ )
  10.     if ( *it == ' ' )
  11.       *( it+1 ) = ::toupper( *( it+1 ) );
  12. }
  13. ...
Ejemplo de llamada:
Código C++:
Ver original
  1. ...
  2.  
  3. int main() {
  4.   string s = "prueba de   texto, primer  letra  de    cada    palabra  en   mayuscula";
  5.  
  6.   firstUpper( s );
  7.  
  8.   cout << s;
  9.  
  10.   return 0;
  11. }

Saludos.

Última edición por ecfisa; 06/04/2015 a las 06:09

Etiquetas: cada, int, letra, palabra, primera, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:57.