hola a todos, quisiera que me ayudaran!
Llevo mucho haciendo esto y no me salen lo he borrado miles de veces!
necesito hacer un programa el cual te lea una cadena y cambie todas las vocales por los numeros del 1 al 9 consecutivamente.
Ejemplo:
Introduces "Foro de elhacker"
y te devuelve: "F1r2 d3 4lh5ck6r"
Se los agradeceria muchisimo!!
GRACIAS!!:D
se me ocurre algo como esto:
x=0;
w=0;
printf ("Cadena\n");
fflush(stdin);
scanf ("%s", cad);
while(cad[x] != '\x0')
{
if (cad[x]=='a' || cad[x]=='A' || cad[x]=='e' || cad[x]=='E' || cad[x]=='i' || cad[x]=='I' || cad[x]=='o' || cad[x]=='O' || cad[x]=='u' || cad[x]=='U')
{
w++;
}
x++;
}
esto identificaria las vocales y en que posicion estan pero nose como hacer para enumerarlas :S
Cita de: n_n en 30 Octubre 2011, 02:04 AMesto identificaria las vocales y en que posicion estan pero nose como hacer para enumerarlas
Pues ya lo estas haciendo. Basta con imprimir el valor de la variable "w" justo despues de su incremento.
Un saludo
Gracias
Pero al poner un
printf ("%i", w);
aparecerian solo los numeros de las vocales y no dentro de la cadena.
Me explico?
Ya estas incrementando el valor por cada vocal....Solo te falta igualar el valor de w en la posicion de cada vocal...O sea ahi si enumeras bien w en cada vocal pero no almacenas el numero en la posicion de la vocal algo asi: cadena en la psicion x=w...
if(.......)
{
w++;
cad[x]=w;
}
Y despues imprimes toda la cadena afuera del while...
No es necesario almacenar los caracteres ni el contador ya que lo unico que se hace con ellos es imprimirlos. Tomando tu ejemplo:
x = 0;
w = 0;
while (cad[x] != '\0'){
if (cad[x] == 'a' || cad[x] == 'A' || cad[x] == 'e' || cad[x] == 'E'
|| cad[x] == 'i' || cad[x] == 'I' || cad[x] == 'o' ||
cad[x] == 'O' || cad[x] == 'u' || cad[x] == 'U'
)
printf("%d", ++w);
else
putchar(cad[x]);
x++;
}
putchar('\n');
Edito: no puede utilizarse la función "putchar" para imprimir el numero de vocales, hay que utilizar printf. Mea culpa. Ya esta corregido
Un saludo
Muchas gracias!!
me sirvio de mucho su ayuda :)
Creo ser más claro así:
int x = 0;
int w = 0;
char vocales[] = { 'A', 'E', 'I', 'O', 'U' };
while (cad[x] != '\0')
{
for (int i = 0; i < 5; ++i)
{
if (toupper(cad[x]) == vocales[i])
{
printf("%d", ++w);
break;
}
}
if (i == 5) putchar(cad[x]);
x++;
}
putchar('\n');
Otra opcion es utilizando la funcion "strchr" (prototipo en <string.h>) para conocer si el caracter es vocal:
char cad[] = "Esta solo es una cadena de prueba";
int i;
int j;
j = 0;
for (i = 0; cad[i] != '\0'; i++)
if (strchr("AEIOUaeiou", cad[i]) == NULL)
putchar(cad[i]);
else
printf("%d", ++j);
putchar('\n');
Un saludo
También puedes hacer lo siguiente:
int counter = 0;
char ch = 0;
while ( (ch = getchar()) != '\n')
{
if (strchr("AEIOU", toupper(ch)) != NULL)
ch = (++counter) + '0';
putchar(ch);
}
Cita de: LearningSpanishProgrammer en 1 Noviembre 2011, 20:35 PMif (strchr("AEIOU", toupper(ch)) != NULL)
ch = (++counter) + '0';
Esa fue mi primera aproximación pero falla si hay mas de nueve vocales en la cadena.
Un saludo