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?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void invertir (char p[]);
main()
{
char palabra[80];
printf("dime una palabra\n");
gets (palabra);
invertir (palabra);
printf("\n");
system("pause");
}
void invertir (char p [])
{
int i,j;
j=strlen(p);
printf("al reves:\n");
for(i=0;i<=j;i++)
{
if (p[i]=='a' || p[i]=='e' || p[i]=='i' ||p[i]=='o'||p[i]=='u')
{
p[i]=' ';
}
printf("%c",p[j-i-1]);
}
}
¡Hola!
Primero debes invertir la palabra, puesto que, si por ejemplo, pones "hola"
h = 0
o = 1
l = 2
a = 3
y dices:
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í:
void invertir (char p [])
{
int i,j;
j=strlen(p);
printf("al reves:\n");
for(i=j-1; i >=0 ;i--)
{
if (p[i]=='a' || p[i]=='e' || p[i]=='i' ||p[i]=='o'||p[i]=='u')
{
p[i] = ' ';
}
printf("%c", p[i]);
}
}
Un saludo.
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:
void invertir (char p [])
{
int i;
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.
printf("al reves:\n");
for(i=0; i<=largo; i++)//mientras que i sea menor o igual que largo elimina las vocales.
{
if (p[i]=='a' || p[i]=='e' || p[i]=='i' ||p[i]=='o'||p[i]=='u')
{
p[i]=' ';
}
}
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.
{
printf("%c",p[i]);
}
}
EDITO: DickGumShoe te lo ha aclarado mejor , que el ha entendido lo que querías hacer con las letras i y j.
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.
Cita de: 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.
Ummm entiendo entiendo ya no se lo digo más , perdón ALONSOQ, gracias por la aclaración Dick ;)
Cita de: ALONSOQ en 6 Septiembre 2012, 17:09 PMHola 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>):
void invertir(char cad[])
{
size_t i;
i = strlen(cad);
while (i > 0)
if (strchr("AEIOUaeiou", cad[--i]) == NULL)
putchar(cad[i]);
putchar('\n');
}
Un saludo
Cita de: 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.
En C99 si se puede hacer eso...
Dulces Lunas!¡.