Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ERIK546 en 28 Junio 2012, 18:52 pm



Título: Programa en C reemplaza las vocales del texto introducido por la siguiente vocal
Publicado por: ERIK546 en 28 Junio 2012, 18:52 pm
Hola a todos, solicito su ayuda para que me digan la razón por la cual el siguiente programa, aunque compila y se ejecuta correctamente, no arroja los resultados esperados. El siguiente programa tiene por objetivo de un texto introducido, cambiar las vocales por la vocal siguiente e imprimir dicho mensaje. Un ejemplo: Al ingresar la palabra: "vestuario", tendría que regresar la palabra "vistaerou".
Les dejo el código:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    int i;
  7.    char t[10];
  8.    printf("Programa que cambia las vocales de un texto por la siguiente vocal\n");
  9.    printf("Introduce el texto\n");
  10.    scanf("%s",t);
  11.    for(i=0;i!='\0';i++){
  12.                      if(t[i]=='a'){
  13.                                    t[i]=='e';
  14.                                    }
  15.                      if(t[i]=='e'){
  16.                                    t[i]=='i';
  17.                                    }
  18.                      if(t[i]=='i'){
  19.                                    t[i]=='o';
  20.                                    }
  21.                      if(t[i]=='o'){
  22.                                    t[i]=='u';
  23.                                    }
  24.                      if(t[i]=='u'){
  25.                                    t[i]=='a';
  26.                                    }
  27.                      }
  28.    printf("%s\n",t);
  29.    system("PAUSE");
  30.    return 0;
  31. }
  32.  
  33.  
Gracias a todos de antemano.


Título: Re: Programa en C reemplaza las vocales del texto introducido por la siguiente vocal
Publicado por: 0xDani en 28 Junio 2012, 20:42 pm
Usas un operador relacional en vez de uno de asignacion.


Título: Re: Programa en C reemplaza las vocales del texto introducido por la siguiente vocal
Publicado por: ERIK546 en 28 Junio 2012, 20:56 pm
Ya lo he corregido y corre a la perfección. Sin embargo tengo duda sobre como una cadena de caracteres podría tomar cualquier tamaño; dependiendo del texto que le sea ingresado,  buscaría algo así como un "malloc" para esta cadena de caracteres. Ya que de momento solo podría hacer dichas operaciones para un máximo de 9 caracteres. Gracias por la corrección.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(int argc, char *argv[])
  5. {
  6.    int i;
  7.    char t[10];
  8.    printf("Programa que cambia las vocales de un texto por la siguiente vocal\n");
  9.    printf("Introduce el texto\n");
  10.    scanf("%s",t);
  11.    for(i=0;i<10;i++){
  12.                      if(t[i]=='a'){
  13.                                    t[i]='e';
  14.                                    }
  15.                      else if(t[i]=='e'){
  16.                                    t[i]='i';
  17.                                    }
  18.                      else if(t[i]=='i'){
  19.                                    t[i]='o';
  20.                                    }
  21.                      else if(t[i]=='o'){
  22.                                    t[i]='u';
  23.                                    }
  24.                      else if(t[i]=='u'){
  25.                                    t[i]='a';
  26.                                    }
  27.                      }
  28.    printf("%s\n",t);
  29.    system("PAUSE");
  30.    return 0;
  31. }
  32.  
También me gustaría saber ¿Porqué no funciona la siguiente condición "if"?, (poniéndola en lugar de la anterior); les dejo escrita la condición, sin embargo poniéndola el programa no hace lo establecido.
Código
  1. for(i=0;i!='\0';i++){....}
  2.  


Título: Re: Programa en C reemplaza las vocales del texto introducido por la siguiente vocal
Publicado por: criskapunk en 28 Junio 2012, 21:51 pm
Quizás me equivoque, pero no estarías comperando un número con un caracter ahí?


Título: Re: Programa en C reemplaza las vocales del texto introducido por la siguiente vocal
Publicado por: maxim_o en 28 Junio 2012, 22:57 pm
Si, yo creo que eso que dices, compara un numero con el caracter nulo... i nunca a valer '/0'.
La condicion deberia ser
Código
  1. t[i]!='/0'


Título: Re: Programa en C reemplaza las vocales del texto introducido por la siguiente vocal
Publicado por: ERIK546 en 28 Junio 2012, 23:33 pm
Si, yo creo que eso que dices, compara un numero con el caracter nulo... i nunca a valer '/0'.
La condicion deberia ser
Código
  1. t[i]!='/0'
Hola muchas gracias maxim_o lo he solucionado con lo que me dices, además me di cuenta que solo funcionaba para cadenas de caracteres sin espacios, al usar "scanf" para guardar el texto en el arreglo, así que he utilizado gets(*) para poder trabajar con escritos completos. Gracias por todo me ha sido de mucha ayuda. Les dejo el código terminado:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(int argc, char *argv[])
  5. {
  6.    int i;
  7.    char t[20];
  8.    printf("Programa que cambia las vocales de un texto por la siguiente vocal\n");
  9.    printf("Introduce el texto\n");
  10.    gets(t);
  11.    for(i=0;t[i]!='\0';i++){
  12.                      if(t[i]=='a'){
  13.                                    t[i]='e';
  14.                                    }
  15.                      else if(t[i]=='e'){
  16.                                    t[i]='i';
  17.                                    }
  18.                      else if(t[i]=='i'){
  19.                                    t[i]='o';
  20.                                    }
  21.                      else if(t[i]=='o'){
  22.                                    t[i]='u';
  23.                                    }
  24.                      else if(t[i]=='u'){
  25.                                    t[i]='a';
  26.                                    }
  27.                      }
  28.    printf("%s\n",t);
  29.    system("PAUSE");
  30.    return 0;
  31. }
  32.  
  33.  
  34.