[?] C++ Ayuda Recorrer cadena?

Iniciado por Scene, 8 Septiembre 2013, 20:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Scene

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).


#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;
}

Stereo

en getCadena retornas cadena en vez de dest, lo que tu quieres, y el void idiomaf está mal, reemplaza esto:

Código (cpp) [Seleccionar]

char* getCadena()
{
return this->dest;
}
void idiomaf()
{
int len = strlen(cadena)+1;
int k=0;
for(int i=0;i<=len;i++)
{
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];
}
}
}

rir3760

Cita de: Scene en  8 Septiembre 2013, 20:18 PMEsta 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 (cpp) [Seleccionar]
void idiomaf()
{
   size_t i;
   size_t j;
   
   j = 0;
   for (i = 0; cadena[i] != '\0'; i++){
      if (cadena[i] == 'a' || cadena[i] == 'e' || cadena[i] == 'i' || cadena[i] == 'o' || cadena[i] == 'u')
         dest[j++] = 'f';
     
      dest[j++] = cadena[i];
   }
   dest[j] = '\0';
   
   strcpy(cadena, dest);
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language