Hola buenos días,
Llevo todo el fin de semana dándole vueltas a un ejercicio de punteros que no hay forma humana de que me funcione correctamente, el caso es que en el tema de punteros ando un poco pez, por lo que me debería de poner las pilas.
El ejercicio en cuestión, dice lo siguiente: Dada una frase, se contará el numero de as, es, is, os y us que tiene. La cantidad de cada vocal se almacenará en un vector de 5 enteros. Se
mostrará una estadística de vocales.
La manipulación de la frase y del vector se hará con punteros.
La declaración de variables será así:
(···)
char frase[256], *pf=frase;
int vocales[5];
int * pv;
pv = &vocales[0];
(···)
Ahora bien, os comento que haciendo el ejercicio sin punteros, me funciona perfectamente, dejo el código para que sirva de ejemplo:
Ahora bien, pasamos al apartado de los punteros... No se si lo que he hecho está bien o es una barbaridad...
Compilar, compila pero da unos resultados que no son nada correctos xD
Espero que me podáis echar un cable.
Un saludo
Llevo todo el fin de semana dándole vueltas a un ejercicio de punteros que no hay forma humana de que me funcione correctamente, el caso es que en el tema de punteros ando un poco pez, por lo que me debería de poner las pilas.
El ejercicio en cuestión, dice lo siguiente: Dada una frase, se contará el numero de as, es, is, os y us que tiene. La cantidad de cada vocal se almacenará en un vector de 5 enteros. Se
mostrará una estadística de vocales.
La manipulación de la frase y del vector se hará con punteros.
La declaración de variables será así:
(···)
char frase[256], *pf=frase;
int vocales[5];
int * pv;
pv = &vocales[0];
(···)
Ahora bien, os comento que haciendo el ejercicio sin punteros, me funciona perfectamente, dejo el código para que sirva de ejemplo:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Prototipo
void cuentavocales(char v[]);
int main()
{
char frase[256];
cuentavocales(frase);
system("PAUSE");
return 0;
}
//Función que cuenta les vocales de la frase
void cuentavocales(char frase[])
{
int i=0,vocales[5]={0};
printf("Introduce una frase: \n");
gets(frase);
for(i=0;i<strlen(frase);i++)
{
if(frase[i]=='a'|| frase[i]=='A') vocales[0]++;
else if(frase[i]=='e' || frase[i]=='E') vocales[1]++;
else if(frase[i]=='i' || frase[i]=='I') vocales[2]++;
else if(frase[i]=='o' || frase[i]=='O') vocales[3]++;
else if(frase[i]=='u' || frase[i]=='U') vocales[4]++;
}
//Mostramos los resultados por pantalla
printf("Estadística \n");
printf("as: %d \n",vocales[0]);
printf("es: %d \n",vocales[1]);
printf("is: %d \n",vocales[2]);
printf("os: %d \n",vocales[3]);
printf("us: %d \n",vocales[4]);
printf("\n TOTAL: %d\n",vocales[0]+vocales[1]+vocales[2]+vocales[3]+vocales[4]);
}
Ahora bien, pasamos al apartado de los punteros... No se si lo que he hecho está bien o es una barbaridad...
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Prototipo
void cuentavocales(char v[5]);
int main()
{
char frase[256],*pf=frase;
cuentavocales(frase);
system("PAUSE");
return 0;
}
//Función que cuenta las vocales de la frase
void cuentavocales(char frase[5])
{
int i=0,vocales[5]={0};
int * pv;
pv = &vocales[0];
printf("Introduce una frase: \n");
gets(frase);
for(i=0;i<strlen(frase);i++)
{
if(frase[i]=='a'|| frase[i]=='A') {
pv++;
}
else if(frase[i]=='e' || frase[i]=='E') {
pv=pv+1;
pv++;
}
else if(frase[i]=='i' || frase[i]=='I') {
pv=pv+2;
pv++;
}
else if(frase[i]=='o' || frase[i]=='O') {
pv=pv+3;
pv++;
}
else if(frase[i]=='u' || frase[i]=='U'){
pv=pv+4;
pv++;
}
}
//Mostramos los resultados por pantalla
printf("Estadística \n");
printf("as: %d \n",*pv);
printf("es: %d \n",*(pv+1));
printf("is: %d \n",*(pv+2));
printf("os: %d \n",*(pv+3));
printf("us: %d \n",*(pv+4));
printf("\n TOTAL: %d\n",*pv+*(pv+1)+*(pv+2)+*(pv+3)+*(pv+4));
}
Compilar, compila pero da unos resultados que no son nada correctos xD
Espero que me podáis echar un cable.
Un saludo
![:D :D](https://forum.elhacker.net/Smileys/navidad/cheesy.gif)