elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  MAYUSCULA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: MAYUSCULA  (Leído 3,890 veces)
anita0421

Desconectado Desconectado

Mensajes: 5


Ver Perfil
MAYUSCULA
« en: 20 Noviembre 2012, 02:06 am »

hola!

tengo una duda
cómo podria cambiar este código de C++ para que no importe cuantos espacios ponga, el segundo nombre de la persona me salga con mayuscula tambien??

esto es lo que tengo

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. using namespace std;
  6. int main()
  7. {
  8. char nombre [25];
  9. puts ("tu nombre es?:");
  10. gets(nombre);
  11. nombre[0]= toupper(nombre[0]);
  12.  
  13. puts ("\n\n Tu nombre es"), puts(nombre);
  14.  
  15.    puts("\n\n");
  16.  
  17. system("pause");
  18. return 0;
  19. }
  20.  


« Última modificación: 20 Noviembre 2012, 04:10 am por simorg » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: MAYUSCULA
« Respuesta #1 en: 20 Noviembre 2012, 02:47 am »

Lo primero a cambiar en el programa son los nombres de los encabezados:
Código
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
No es necesario <string.h>, en su lugar se debe incluir <cctype> ya que ahí se encuentra el prototipo de la función "toupper":
Código
  1. #include <cstdlib>
  2. #include <cctype>
  3. #include <cstdio>

Y para ignorar los espacios al principio de la cadena puedes utilizar un bucle y la funcion "isspace" (prototipo en <cctype>):
Código
  1. gets(nombre);
  2.  
  3. // Descartamos los espacios al principio de la cadena
  4. int i;
  5. for (i = 0; isspace(nombre[i]); i++)
  6.   ;
  7. // Se cambia a mayuscula el primer caracter
  8. nombre[i] = toupper(nombre[i]);
Por cierto no te recomiendo utilizar funciones de la biblioteca estándar de C como "puts" y "gets" si estas aprendiendo C++. En su lugar concéntrate en las facilidades de este como "cin", "cout", etc.

Si deseas consultar mas recomendaciones revisa el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
anita0421

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: MAYUSCULA
« Respuesta #2 en: 20 Noviembre 2012, 05:17 am »

mmmm creo que me malinterpretaste... solo quiero que el segundo nombre de la persona lleve mayuscula tambien
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: MAYUSCULA
« Respuesta #3 en: 20 Noviembre 2012, 05:28 am »

Bueno, pero es básicamente el mismo code que posteó rir3760 con el agregado de leer antes el primer nombre.

Es decir, lees el nombre completo, el primer caracter a mayúscula, lees el nombre entero hasta topar con un espacio (que indica que el primer nombre terminó). Luego utilizas el code de rir3760 y listo.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: MAYUSCULA
« Respuesta #4 en: 20 Noviembre 2012, 15:16 pm »

OK. Sorry.

En ese caso y como ya comento Ferno puedes utilizar dos bucles, mas o menos asi:
Código
  1. // Lectura del nombre completo (es mejor utilizar getline)
  2. gets(nombre);
  3.  
  4. // Primer caracter (nombre) a mayusculas
  5. nombre[0] = toupper(nombre[0]);
  6.  
  7. // Ignoramos el nombre (encontramos el primer espacio)
  8. int i;
  9. for (i = 1; !isspace(nombre[i]); ++i)
  10.   ;
  11.  
  12. // Ignoramos los espacios despues del nombre
  13. while (isspace(nombre[++i]))
  14.   ;
  15.  
  16. // Primer caracter (Apellido) a mayusculas
  17. nombre[i] = toupper(nombre[i]);

Debe funcionar pero tiene sus limitaciones: 1) Se puede hacer mas corto con funciones de la biblioteca estándar de C como "strspn" (mejor utilizar las facilidades de C++ como la clase "string") y 2) no tiene validaciones (revienta si no hay apellido, lo cual no es tan malo considerando el programa puede reventar desde el uso de "gets").

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
anita0421

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: MAYUSCULA
« Respuesta #5 en: 21 Noviembre 2012, 02:21 am »

ohh yo tenia este

/* Este programa cambia el primer caracter de cada palabra
   a su respectiva mayuscula. Valida caracter por caracter,
   si se encuentra un espacio ' ' reemplaza el siguiente
   caracter "indice+1" a su respectiva mayuscula. Concluye
   hasta encontrar un fin de cadena '\0' que es el ultimo
   caracter en una cadena (char)
*/

#include <ctype.h>
#include <stdio.h>
#include <conio.h>

using namespace std;

int main()
{
   int indice;
   char nombre[25];
   
   puts("Tu nombre es?: "), gets(nombre);
   
    nombre[0]=toupper(nombre[0]);
   
   for (indice=0; nombre[indice]!='\0'; indice++)
      if (nombre[indice]==' ')
         nombre[indice+1]=toupper(nombre[indice+1]);

   puts("\n\nTu nombre es "), puts(nombre) ;
   
   puts("\n\n");
   
   
   system("PAUSE");
       return 0;
}




pero mi profe dijo que el algoritmo hacia mucho trabajo "cambiando" cada espacio a mayuscula... pero no se como hacer que se ahorre ese "trabajo"

no se si me de a entender, el codigo hace su trabajo si pones cualquier nombre te devuelve las dos iniciales con mayuscula aunque pongas 10 espacios, pero el profe dijo que debia hacer el procedimiento mas rapido de otra manera, (no se cual es) podrian ayudarme?
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: MAYUSCULA
« Respuesta #6 en: 21 Noviembre 2012, 19:01 pm »

El primer detalle a considerar: ignorando las pocas excepciones (como "using namespace std;") ese programa es C cuando tu estas aprendiendo C++. También se debe evitar el uso de la función "gets" y la biblioteca "conio" de Borland. Mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Regresando al programa la forma mas sencilla es: 1) Cambias el primer carácter de forma manual (al parecer esta garantizado que este sea alfabético) y 2) Cambias a mayúsculas el primer carácter alfabético a continuación de un espacio.

Mas o menos así:
Código
  1. char nombre[25];
  2. int i;
  3.  
  4. puts("Tu nombre es?:");
  5. gets(nombre); // gets puede fallar o leer una linea vacia ...
  6.  
  7. nombre[0] = toupper(nombre[0]);
  8. for (i = 2; nombre[i] != '\0'; i++)
  9.   if (nombre[i - 1] == ' ' && isalpha(nombre[i]))
  10.      nombre[i] = toupper(nombre[i]);

Pero de nuevo la preocupación es que no estas aprendiendo C++.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
convertir txt a mayuscula minuscula mayuscuala...
Programación Visual Basic
4D1cTo 4 5,826 Último mensaje 18 Junio 2006, 15:10 pm
por Hadess_inf
primera letra mayuscula en textbox
Programación Visual Basic
erick185 1 7,568 Último mensaje 22 Octubre 2008, 04:19 am
por cassiani
convertir minúscula a mayúscula « 1 2 »
Programación C/C++
m@o_614 10 47,525 Último mensaje 24 Abril 2017, 12:31 pm
por NikNitro!
cadenas y uso de MAYUSCULA
Programación C/C++
JoshDur 6 3,353 Último mensaje 26 Noviembre 2019, 19:42 pm
por K-YreX
convertir todo a mayuscula, 1ra palabra en mayuscula y concatenar si no esta vacio
Scripting
Rosa1010 1 8,159 Último mensaje 29 Enero 2024, 08:04 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines