Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ALONSOQ en 6 Septiembre 2012, 17:09 pm



Título: eliminar vocales
Publicado por: ALONSOQ en 6 Septiembre 2012, 17:09 pm
Hola estoy haciendo un programa que invierta una cadena y elimie las vocales.

La primera parte la tengo controlada, pero a la hora de eliminar vocales no consigo eliminar todas, ¿ podeis echarme un cable, por favor?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void invertir (char p[]);
  6.  
  7. main()
  8. {
  9. char palabra[80];
  10.  
  11. printf("dime una palabra\n");
  12. gets (palabra);
  13. invertir (palabra);
  14. printf("\n");
  15. system("pause");      
  16. }
  17.  
  18. void invertir (char p [])
  19. {
  20.     int i,j;
  21.     j=strlen(p);
  22.     printf("al reves:\n");
  23.  
  24.    for(i=0;i<=j;i++)
  25.    {
  26.     if (p[i]=='a' || p[i]=='e' ||  p[i]=='i' ||p[i]=='o'||p[i]=='u')      
  27.     {
  28.     p[i]=' ';
  29.     }      
  30.    printf("%c",p[j-i-1]);
  31.   }    
  32. }
  33.  


Título: Re: eliminar vocales
Publicado por: DickGumshoe en 6 Septiembre 2012, 17:37 pm
¡Hola!

Primero debes invertir la palabra, puesto que, si por ejemplo, pones "hola"

Código:
h = 0
o = 1
l = 2
a = 3

y dices:

Código:
i = 0 ---> si p[i] es una vocal, se convierte en un espacio --> imprimes p[j-i-1], o lo que es lo mismo, p[3], que es una letra que todavía no has eliminado, siendo una vocal. 


Entonces, queda así:

Código
  1. void invertir (char p [])
  2. {
  3.     int i,j;
  4.     j=strlen(p);
  5.     printf("al reves:\n");
  6.  
  7.    for(i=j-1; i >=0 ;i--)
  8.    {
  9.  
  10.        if (p[i]=='a' || p[i]=='e' ||  p[i]=='i' ||p[i]=='o'||p[i]=='u')
  11.        {
  12.               p[i] = ' ';
  13.        }
  14.       printf("%c", p[i]);
  15.   }
  16. }

Un saludo.


Título: Re: eliminar vocales
Publicado por: avesudra en 6 Septiembre 2012, 17:40 pm
Hola ALONSOQ , te has liado un poco , y yo también me lío con tu código así que he optado porque elimine las vocales primero, y imprima la cadena desde atrás hacia adelante , es más facil  >:D mira:
Código
  1. void invertir (char p [])
  2. {
  3.    int i;
  4.    int largo=strlen(p)-1;// La posición [0] es una letra , por eso el menos 1 lo que haría sería poner el caracter nulo primero.
  5.    printf("al reves:\n");
  6.    for(i=0; i<=largo; i++)//mientras que i sea menor o igual que largo elimina las vocales.
  7.    {
  8.        if (p[i]=='a' || p[i]=='e' ||  p[i]=='i' ||p[i]=='o'||p[i]=='u')
  9.        {
  10.            p[i]=' ';
  11.        }
  12.    }
  13.    for(i = largo; i >= 0; --i)//i es igual al largo(apunta a la ultima letra) , mientras i sea mayor o igual que 0 imprime desde atrás.
  14.    {
  15.        printf("%c",p[i]);
  16.    }
  17. }

EDITO: DickGumShoe te lo ha aclarado mejor , que el ha entendido lo que querías hacer con las letras i y j.


Título: Re: eliminar vocales
Publicado por: DickGumshoe en 6 Septiembre 2012, 17:44 pm
Avesudra, una pequeña anotación, AlonsoQ está estudiando C, y si no recuerdo mal no se pueden declarar las variables justo cuando la vas a usar, debe ser al principio de la función (en C++ sí que se puede).

Un saludo.


Título: Re: eliminar vocales
Publicado por: avesudra en 6 Septiembre 2012, 17:55 pm
Avesudra, una pequeña anotación, AlonsoQ está estudiando C, y si no recuerdo mal no se pueden declarar las variables justo cuando la vas a usar, debe ser al principio de la función (en C++ sí que se puede).

Un saludo.
Ummm entiendo entiendo ya no se lo digo más , perdón ALONSOQ, gracias por la aclaración Dick  ;)


Título: Re: eliminar vocales
Publicado por: rir3760 en 6 Septiembre 2012, 19:14 pm
Hola estoy haciendo un programa que invierta una cadena y elimie las vocales.
Lo primero que debes aclarar es a que te refieres con eliminar las vocales ya que en tu programa solo las sustituyes por un espacio.

Si la idea es no imprimirlas una forma es, utilizando la función "strchr" (prototipo en <string.h>):
Código
  1. void invertir(char cad[])
  2. {
  3.   size_t i;
  4.  
  5.   i = strlen(cad);
  6.   while (i > 0)
  7.      if (strchr("AEIOUaeiou", cad[--i]) == NULL)
  8.         putchar(cad[i]);
  9.   putchar('\n');
  10. }

Un saludo


Título: Re: eliminar vocales
Publicado por: BlackZeroX en 6 Septiembre 2012, 19:38 pm
Avesudra, una pequeña anotación, AlonsoQ está estudiando C, y si no recuerdo mal no se pueden declarar las variables justo cuando la vas a usar, debe ser al principio de la función (en C++ sí que se puede).

Un saludo.

En C99 si se puede hacer eso...

Dulces Lunas!¡.