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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


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

Desconectado Desconectado

Mensajes: 62



Ver Perfil
eliminar vocales
« 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.  


En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: eliminar vocales
« Respuesta #1 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.


« Última modificación: 6 Septiembre 2012, 17:39 pm por DickGumshoe » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: eliminar vocales
« Respuesta #2 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.
« Última modificación: 6 Septiembre 2012, 17:57 pm por avesudra » En línea

Regístrate en
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: eliminar vocales
« Respuesta #3 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.
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: eliminar vocales
« Respuesta #4 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  ;)
« Última modificación: 6 Septiembre 2012, 17:58 pm por avesudra » En línea

Regístrate en
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: eliminar vocales
« Respuesta #5 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
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
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: eliminar vocales
« Respuesta #6 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!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] Vocales y carácteres « 1 2 »
Scripting
Meta 12 13,389 Último mensaje 29 Julio 2014, 21:26 pm
por Eleкtro
Representación hexadecimal de las vocales con acento
Programación C/C++
cesariox23 3 5,061 Último mensaje 29 Junio 2014, 07:19 am
por cesariox23
Cambiar vocales a 2 cadenas
Programación C/C++
dark_link00 1 2,035 Último mensaje 8 Junio 2014, 16:40 pm
por rir3760
Como pasar a mayuscula vocales acentuadas ?
Programación C/C++
jesus++ 9 4,508 Último mensaje 16 Julio 2014, 21:38 pm
por Miseryk
Eliminar vocales C++
Programación C/C++
bryanrz96 1 2,499 Último mensaje 30 Octubre 2015, 14:33 pm
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines