Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: vale1213 en 6 Octubre 2022, 02:13 am



Título: hola necesito ayuda con una tarea de programación en lenguaje c
Publicado por: vale1213 en 6 Octubre 2022, 02:13 am
La función debe realizar el siguiente procedimiento:

Identificar y retornar el número de vocales que posee el nombre ingresado.
Reemplazar e imprimir las vocales por el símbolo # en la posición donde fueron localizadas.

este es mi avance y no logro reemplazar las vocales por el símbolo:

Código
  1. int busca_vocales(char *cadena);
  2.  
  3. int main(int argc, char const *argv[])
  4. {
  5.  
  6. char t[30];
  7. int i;
  8. //vocales//
  9. printf("Escribe un nombre:\n");
  10. gets(t);
  11. int vocales = busca_vocales(t);
  12. printf("El numero de vocales que tiene el nombre es: %d\n", vocales);
  13.  
  14. //cambiar vocales por ##//
  15.   printf("cambio de vocales por #: %s", t);
  16.      for(i=0;t[i]!='\0';i++){
  17.        if(t[i]=='a')
  18.            t[i]='#';
  19. else if(t[i]=='e')
  20.            t[i]='#';
  21. else if(t[i]=='i')
  22.            t[i]='#';
  23. else if(t[i]=='o')
  24.            t[i]='#';
  25. else if(t[i]=='u')
  26.            t[i]='#';
  27.    }
  28.  
  29.  
  30.  
  31. return 0;
  32. }
  33. int busca_vocales(char *cadena){
  34. int vocales = 0;
  35. int indice;
  36.  
  37. for(indice = 0; cadena[indice] != '\0'; ++indice){
  38. char letraactual = tolower(cadena[indice]);
  39.  
  40.  
  41. if (
  42. letraactual == 'a' ||
  43. letraactual == 'e' ||
  44. letraactual == 'i' ||
  45. letraactual == 'o' ||
  46. letraactual == 'u'
  47. )
  48. {
  49. vocales++;
  50. }
  51. }
  52. return vocales;
  53. }

MOD: El código debe ir entre etiquetas de Código GeSHi


Título: Re: hola necesito ayuda con una tarea de programación en lenguaje c
Publicado por: Lieutenant McFarley en 6 Octubre 2022, 12:33 pm
Dando un vistazo por encima parece que en "t" almacenas el nombre a analizar., una cadena. En las líneas
   if(t=='a')
            t='#';
   else if(t=='e')
            t='#';
   else if(t=='i')
            t='#';
   else if(t=='o')
            t='#';
   else if(t=='u')
            t='#';
Se está comparando la cadena entera con una vocal, no cada uno de los caracteres que forman la cadena. Pienso que debería analizarse carácter por carácter uno a uno de la cadena y cambiarlo cuando proceda. Algo parecido a lo que se hace para contar las vocales, recorrer toda la cadena; no comparar ésta al completo con una sola vocal.


Título: Re: hola necesito ayuda con una tarea de programación en lenguaje c
Publicado por: K-YreX en 9 Octubre 2022, 19:47 pm
El problema que menciona @Lieutenant McFarley sucede por no utilizar etiquetas de Código GeSHi para agregar códigos.
La letra 'i' entre corchetes '[]' se interpreta como letra cursiva por lo que no se ve en el código y a partir de ahí el resto del código se empieza a ver en cursiva: tal que así

Los códigos se deben insertar usando el desplegable de "Código GeSHi" y seleccionando el lenguaje correspondiente o escribiendo manualmente las etiquetas:
[code=c]
// Codigo C aqui
[/code]


Y la respuesta al problema original es: no existe ningún problema.
Se podría mejorar un poco el código ya que ahora mismo sólo se sustituyen las vocales minúsculas y los ifs se pueden juntar en uno solo usando el operador OR (||)
Por lo demás, si muestras la cadena t después del for que reemplaza las vocales, verás que se han reemplazado correctamente...  :rolleyes: