Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Scene en 8 Septiembre 2013, 20:18 pm



Título: [?] C++ Ayuda Recorrer cadena?
Publicado por: Scene en 8 Septiembre 2013, 20:18 pm
Esta clase hace que una palabra la convierta en leguaje ("f") (a cada vocal se le agrega ´f´ mas la misma vocal tiene todas las condiciones pero siempre sigue saliendo la misma palabra si me pudieran ayudar gracias(No se si no recorre la cadena o por que no hace nada).

Código:
#include<iostream>
#include<cstring>
using namespace std;
class eFe
{
private:
char cadena[100];
char dest[100];
public:
eFe(char cadena[])
{
strcpy(this -> cadena,cadena);
}
void setCadena(char cadena [])
{
strcpy(this -> cadena,cadena);
}
char* getCadena()
{
return this->cadena;
}
void idiomaf()
{
for(int i=0;i<=strlen(cadena);i++)
{
int k=0;
if(cadena[i]=='a' || cadena[i]=='e' || cadena[i]=='i' || cadena[i]=='o' || cadena[i]=='u')
{
dest[k++]='f';
dest[k++]=cadena[i];
}
else
{
dest[k++]=cadena[i];
}
}
for(int i=0;i<strlen(dest);i++)
cout<<dest[i];
}
};
int main ()
{
eFe e=("hola");
e.idiomaf();
cout<<e.getCadena()<<endl;
return 0;
}


Título: Re: [?] C++ Ayuda Recorrer cadena?
Publicado por: Stereo en 8 Septiembre 2013, 21:25 pm
en getCadena retornas cadena en vez de dest, lo que tu quieres, y el void idiomaf está mal, reemplaza esto:

Código
  1. char* getCadena()
  2. {
  3. return this->dest;
  4. }
  5. void idiomaf()
  6. {
  7. int len = strlen(cadena)+1;
  8. int k=0;
  9. for(int i=0;i<=len;i++)
  10. {
  11. if(cadena[i]=='a' || cadena[i]=='e' || cadena[i]=='i' || cadena[i]=='o' || cadena[i]=='u')
  12. {
  13. dest[k++]='f';
  14. dest[k++]=cadena[i];
  15. }
  16. else
  17. {
  18. dest[k++]=cadena[i];
  19. }
  20. }
  21. }


Título: Re: [?] C++ Ayuda Recorrer cadena?
Publicado por: rir3760 en 9 Septiembre 2013, 17:42 pm
Esta clase hace que una palabra la convierta en leguaje ("f") (a cada vocal se le agrega ´f´ mas la misma vocal tiene todas las condiciones pero siempre sigue saliendo la misma palabra
Errores hay varios.

Como ya te comento Stereo no estas retornando la cadena correcta y en el bucle donde agregas las 'f's inicializas el contador "k" dentro del bucle cuando deberías hacerlo fuera de el.

Ademas no necesitas utilizar la función strlen, basta con procesar todos los caracteres antes del '\0' (el delimitador de cadena), en ambas ramas del condicional asignas el carácter procesado lo que resulta en una sentencia repetida y por ultimo una vez generes la cadena en "dest" (que es una variable temporal) la debes copiar en "cadena".

Esa función con los cambios:
Código
  1. void idiomaf()
  2. {
  3.   size_t i;
  4.   size_t j;
  5.  
  6.   j = 0;
  7.   for (i = 0; cadena[i] != '\0'; i++){
  8.      if (cadena[i] == 'a' || cadena[i] == 'e' || cadena[i] == 'i' || cadena[i] == 'o' || cadena[i] == 'u')
  9.         dest[j++] = 'f';
  10.  
  11.      dest[j++] = cadena[i];
  12.   }
  13.   dest[j] = '\0';
  14.  
  15.   strcpy(cadena, dest);
  16. }

Un saludo