Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SDCC en 1 Febrero 2018, 23:51 pm



Título: Convertir una cadena en Mayusculas
Publicado por: SDCC en 1 Febrero 2018, 23:51 pm
Buenos dias a todos , hoy mientras probaba la funcion toupper encontrada en la libreria ctype.h me surgio la necesidad de convertir una cadena en mayusculas para poderla comparar con una frase ya predeterminada , he visto que la funcion toupper solo me funciona a la hora de convertir un solo caracter , pero a la hora de querer convertir toda una cadena en mayusculas con esta funcion no me deja , alguien sabe si la unica opcion para convertir toda la cadena en mayusculas es ir convirtiendo caracter por caracter en mayusculas?, es decir:
Código
  1.  
  2. char c1[4];
  3. printf("Ingresa una frase "); \*Ingresa "hola" en minusculas *\
  4. \*Converti en Mayusculas*\
  5. for (int j=0;j<4;j++){
  6. c1[j]=toupper(c1[j]);
  7.                               }
  8.  
  9.  
O se podria realizar con ayuda de alguna funcion de manera que se transformara toda la cadena en mayuscula en un solo paso.

NOTA: ESTE ES EL PROGRAMA QUE INTENTO REALIZAR , LO UNICO QUE QUISIERA MODIFICAR ES QUE SI LA FRASE SE ESCRIBE EN MINUSCULAS SE CONVIERTA A MAYUSCULAS PARA QUE SE PUEDA VERIFICAR CON LA FRASE.
Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. int main(){
  7. char c1[]="TIENES", c2[]="QUE SER", c3[]="INVITADO", c4[]="PARA", c5[]="INGRESAR", cE[20],band=0;
  8.  
  9.  
  10. printf("Este es un programa que se encarga de verificar 5 claves para poder entrar a una fiesta\nIngresa la primera clave\n");
  11. scanf("%s",cE);
  12.  
  13. if (strcmp(c1,cE)==0){
  14. printf("Ingresa la segunda clave\n");
  15. gets(cE);
  16.  
  17.  
  18. if(strcmp(c2,cE)==0){
  19. printf("Ingresa la tercera clave\n");
  20. scanf("%s",(cE));
  21.  
  22.  
  23. if(strcmp(c3,cE)==0){
  24. printf("Ingresa la cuarta clave\n");\
  25. scanf("%s",cE);
  26.  
  27.  
  28. if(strcmp(c4,cE)==0){
  29. printf("Ingresa la quinta clave\n");
  30. scanf("%s",cE);
  31.  
  32.  
  33. if(strcmp(c5,cE)==0){
  34. printf("BIENVENIDO A LA FIESTA\n");
  35. band=1;
  36. }
  37. }
  38. }
  39. }
  40. }
  41. if(band==0)
  42. printf("TE EQUIVOCASTE DE FIESTA\n");
  43.  
  44. }


Título: Re: Convertir una cadena en Mayusculas
Publicado por: MAFUS en 2 Febrero 2018, 09:38 am
Tiene que ser carácter a carácter. Si quieres hacerlo de una vez genera una función que tome dicha cadena y pase toupper carácter a carácter. Al regresar tendrás tu cadena en mayúsculas.

Por cierto, para guardar "hola" necesitas un array de 5 caracteres. Acuérdate que toda cadena tiene un carácter NUL ('\0') al final para marcar el fin de ésta.


Título: Re: Convertir una cadena en Mayusculas
Publicado por: dijsktra en 2 Febrero 2018, 12:06 pm
Esta solucion es mas general. Y segura

Código
  1.  
  2. char w[]=...
  3. for( ; *w ; w++) *w=toupper(*w);
  4.  

Dentro de una rutina...

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. char *toupper_w(char *w)
  5. {
  6.  char *c=w;
  7.  for( ; *w ; w++) *w=toupper(*w);
  8.  return (w=c);
  9. }
  10.  
  11.  
  12. int main(int argc, char *args[])
  13. {
  14.  char w[512];
  15.  while (scanf("%s",w)!=EOF)
  16.    printf("%s \n",toupper_w(w));
  17.  return 0;
  18. }


Da esta salida
Código:
La
LA
Estacion
ESTACION
de
DE
SERRRvicio
SERRRVICIO