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)
| | |-+  Programa capitalizador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programa capitalizador  (Leído 4,299 veces)
yuna88

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Programa capitalizador
« en: 21 Abril 2014, 16:16 pm »

Hola a todos, necesito realizar un programa que al introducirle una frase en cualquier formato (mayúsculas o minúsculas) me capitalice la frase. Es decir sí introduzco I love This GAME el programa por pantalla me mostrará I Love This Game.

Paso a mostraros el código que tengo hasta ahora que de poco sirve porque solo me pone en mayúscula la primera palabra:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main()
  6. {
  7. char frase[100];
  8.  
  9. printf("Introduce una frase: ");
  10. scanf("%s",&frase);
  11.  
  12. frase[0]=toupper(frase[0]);
  13.  
  14. printf("La frase capitalizada es: %s\n",frase);
  15.  
  16. system("PAUSE");
  17. return 0;
  18. }
 

Para que el programa haga lo que realmente necesito, sería necesario que la primera letra de la frase fuera mayúscula y cada vez que se detecte un espacio, la siguiente letra también fuera en mayúscula. Creo que éste es el razonamiento correcto a éste programa, el problema es, que no se muy bien como plantearlo.

Espero que me podáis ayudar.

Un saludo  :-*


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa capitalizador
« Respuesta #1 en: 21 Abril 2014, 16:25 pm »

cuando tienes que hacerle una pregunta al código, la solución es un if o un switch.

En tu caso, la opción lógica es un if.

Lo primero que necesitas es una variable para controlar si el carácter anterior era un espacio o no... algo tipo int espacio = 0; te valdría.

Después tienes que meter un bucle for que recorra toda la "frase". Recuerda que una cadena SIEMPRE termina con el carácter nulo '\0'. En cada iteración del bucle tienes que comprobar el valor de "espacio" y actuar en consecuencia... y no olvidarte de volver a actualizar "espacio".

Código
  1. int espacio = 0;
  2. int i;
  3. for ( i = 0; frase[ i ] != '\0'; i++ )
  4. {
  5.  if ( espacio )
  6.  {
  7.    // A mayusculas
  8.  }
  9.  else
  10.  {
  11.    // A minusculas
  12.  }
  13.  
  14.  espacio = ( frase[ i ] == ' ' );
  15. }


En línea

yuna88

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Programa capitalizador
« Respuesta #2 en: 21 Abril 2014, 17:53 pm »

cuando tienes que hacerle una pregunta al código, la solución es un if o un switch.

En tu caso, la opción lógica es un if.

Lo primero que necesitas es una variable para controlar si el carácter anterior era un espacio o no... algo tipo int espacio = 0; te valdría.

Después tienes que meter un bucle for que recorra toda la "frase". Recuerda que una cadena SIEMPRE termina con el carácter nulo '\0'. En cada iteración del bucle tienes que comprobar el valor de "espacio" y actuar en consecuencia... y no olvidarte de volver a actualizar "espacio".

Código
  1. int espacio = 0;
  2. int i;
  3. for ( i = 0; frase[ i ] != '\0'; i++ )
  4. {
  5.  if ( espacio )
  6.  {
  7.    // A mayusculas
  8.  }
  9.  else
  10.  {
  11.    // A minusculas
  12.  }
  13.  
  14.  espacio = ( frase[ i ] == ' ' );
  15. }

Hola eferion,

Primero de todo, darte las gracias por ofrecerte a ayudarme. Ahora paso a realizarte un par de preguntas.

¿La condición del
Código
  1. if
no está completa no? Falta algo...

Y luego... En los comentarios
Código
  1. // A mayúsculas
y
Código
  1. //A minúsculas
¿Te refieras que introduzca el código necesario para que la frase sea convertida respectivamente a esos formatos?

Muchas gracias de nuevo.

Un saludo  :-*

 
« Última modificación: 21 Abril 2014, 17:55 pm por yuna88 » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Programa capitalizador
« Respuesta #3 en: 21 Abril 2014, 17:56 pm »



Creo que se podría hacer sin variable adicional, sin más que touppear el siguiente caracter a espacio, incrementando a un tiempo el índice y tampoco creo necesario indicar explicitamente el caracter nulo en el for. Algo como:

Código
  1. ........................
  2.  int i;
  3.  char frase[]="i love This GAME";
  4.  frase[0]=toupper(frase[0]);
  5.  for (i=1;frase[i];i++)
  6.    if (frase[i]==' ')
  7.      frase[(i++) +1]=toupper(frase[i]);
  8.    else
  9.      frase[i]=tolower(frase[i]);
  10.  printf("La frase capitalizada es: %s\n",frase);
  11. ......................................
  12.  

Citar
La frase capitalizada es: I Love This Game

Process returned 0 (0x0)   execution time

¡¡¡¡ Saluditos! ..... !!!!


En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Programa capitalizador
« Respuesta #4 en: 21 Abril 2014, 19:12 pm »

Para que la salida sea la correcta, en la llamada a la función toupper esta linea:

Código
  1. frase[(i++)+1] = toupper(frase[i]);

De esta forma tu estas pasando en cada llamada a la función toupper el indice del caracter espacio, obteniendo asi resultados no deseados en la salida lo correcto seria
 
Código
  1. frase[(i++)+1] = toupper(frase[i+1]);

Un gusto volver a pasar aqui..

Saludos

« Última modificación: 21 Abril 2014, 19:14 pm por Blaster » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Programa capitalizador
« Respuesta #5 en: 21 Abril 2014, 19:22 pm »

Para que la salida sea la correcta, en la llamada a la función toupper esta linea:

Código
  1. frase[(i++)+1] = toupper(frase[i]);

De esta forma tu estas pasando en cada llamada a la función toupper el indice del caracter espacio, obteniendo asi resultados no deseados en la salida lo correcto seria
 
Código
  1. frase[(i++)+1] = toupper(frase[i+1]);

Un gusto volver a pasar aqui..

Saludos



Pues va a ser que no. He aquí una salida a tu idea:

Citar
La frase capitalizada es: I Oove Hhis Aame

Process returned 0 (0x0)   execution time

El motivo es que en frase[ i ], a la izquierda de toupper, se post-incrementa la variable i y al encontrase con el toupper a su derecha ya está incrementada dando mi código el resultado correcto, mientras el tuyo se pasa de caracter. ;)

¡¡¡¡ Saluditos! ..... !!!!


En línea

yuna88

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Programa capitalizador
« Respuesta #6 en: 21 Abril 2014, 20:04 pm »

Hola leosansan,

Decirte que Blaster tiene razón. Sí ejecuto tú código, el resultado es:
I ove his ame

En cambio, si añado el +1 al indice i, aparece la frase correctamente.

Un saludo y gracias a ambos por la ayuda  :-*
« Última modificación: 21 Abril 2014, 20:06 pm por yuna88 » En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Programa capitalizador
« Respuesta #7 en: 21 Abril 2014, 20:16 pm »

El motivo es que en frase[ i ], a la izquierda de toupper, se post-incrementa la variable i y al encontrase con el toupper a su derecha ya está incrementada dando mi código el resultado correcto, mientras el tuyo se pasa de caracter. ;)

Lamento contradecirte pero me temo que el valor de i como tu bien lo haz dicho se post-incrementa ya que antes de ocurrir el incremento el valor de i es utilizado en la asignación indicada para luego aumentar

Saludos..
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Programa capitalizador
« Respuesta #8 en: 21 Abril 2014, 20:44 pm »

Ya lo dicen, más vale una imagen.....




De lo que no me cabe duda es de que usan el Dev-C++, ¿o no?.

Y yo no sólo uso Code::Blocks, también uso PellesC que es un purista y más, pero ya sabemos que Dev-C++ es lo que es ..... decepcionante, al menos para mi, pero vamos que no quiero empezar una diatriba sobre el tema. :)

Y sí, el incremento que hago es digamos que arriesgado, por algo me lanza un warning, pero eso lo hace más emocionante. :)


Pero nada, si te ha funcionado con el +1 a ponerlo y todos tan felices
.

¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 21 Abril 2014, 20:49 pm por leosansan » En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Programa capitalizador
« Respuesta #9 en: 21 Abril 2014, 20:58 pm »

Estas equivocado yo uso el Code::Blocks 13.12 tambien tengo el PellesC y otros
y con respecto al codigo sigo manteniendo mi punto de vista de que deberia se como lo he indicado anteriormente, pero tu te niegas a ver el pequeño error que tiene

Saludos..
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa que hace click en un lugar fuera del programa [c#]
.NET (C#, VB.NET, ASP)
Un usuario 1 2,789 Último mensaje 24 Octubre 2006, 22:58 pm
por SeniorX
programa de matriz aver si el programa q estoy haciendo esta bien « 1 2 »
Programación C/C++
eduardo17445 10 6,788 Último mensaje 23 Octubre 2012, 00:11 am
por flony
[Ayuda] ¿Cómo ejecutar otro programa desde mi programa de C#?
.NET (C#, VB.NET, ASP)
Zodiak98 1 6,164 Último mensaje 8 Diciembre 2013, 01:51 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines