[C con Clase] Tratamiento de cadenas

Alejandro alepelexo en yahoo.es
Mar Ene 29 12:36:29 CET 2008


¡Hola lista! Tengo un pequeño problema con una función que realiza cierto tratamiento sobre una cadena. Éste es el código de la función:

char* ModTexto(char inicial[128], int jug, int oponente)
{
      char auxiliar[512];//Cadena auxiliar
      char definitiva[128];//Cadena definitiva
      int k, i, x;//Contadores
      
      for(k = 0; inicial[k]; k++)
      {
          definitiva[k] = inicial[k];
      }
      
      for(k = 0; definitiva[k]; k++)
      {
            if(definitiva[k] == '%')
            {
                    if(definitiva[k+1] == 'j')
                    {
                            x = 0;
                            for(int y = 0; auxiliar[y]; y++)
                            {
                                    auxiliar[y] = 0;
                            }
                            for(i = k+2; definitiva[i]; i++)
                            {
                                    auxiliar[x] = definitiva[i];
                                    x++;
                            }
                            x= 0;
                            for(i = k; jugador[jug].nick[x]; i ++)
                            {
                                  definitiva[i] = jugador[jug].nick[x];
                                  x++;
                            }
                            for(x = 0; auxiliar[x]; x++)
                            {
                                    definitiva[i] = auxiliar[x];
                                    i++;
                            }
                    }
                    if(definitiva[k+1] == 'o')
                    {
                            x = 0;
                            for(int y = 0; auxiliar[y]; y++)
                            {
                                    auxiliar[y] = 0;
                            }
                            for(i = k+2; definitiva[i]; i++)
                            {
                                    auxiliar[x] = definitiva[i];
                                    x++;
                            }
                            x= 0;
                            for(i = k; jugador[oponente].nick[x]; i ++)
                            {
                                  definitiva[i] = jugador[oponente].nick[x];
                                  x++;
                            }
                            for(x = 0; auxiliar[x]; x++)
                            {
                                    definitiva[i] = auxiliar[x];
                                    i++;
                            }
                    }
            }
      }
      
      return definitiva;
}


Pues bien, lo que yo quiero es que me transforme una cadena del tipo "Vaya! %j le ha dado un buen golpe a %o!". Decha cadena estaría en un arcjivo de texto y lo que quiero es que sustituya los caracteres "%j" y "%o" por los nicks de un jugador y su oponente. Dichos nicks se introducen al principo del programa. Ahora voy a contar mi problema. Si la cadena es como dije y acaba con un caracter normal, no tengo ningún problema. Pero cuando la cadena que intento tratar acaba por "%o" o por "%j" se me añaden unas sopechosas símbolos al final de la cadena, tras un salto de línea. Supongamos que el nick del jugador es "Jug1" y el del oponente es "Opon". Pues si yo intento tratar la cadena "Vaya! Un gran ataque de %j golpea a %o!" el resultado es: "Vaya! Un gran ataque de Jug1 golpea a Opon!". Perfecto. Sin embargo, si yo intento tratar la cadena "Vaya! Un gran ataque de %j golpea a %o" el resultado es: "Vaya! Un gran ataque de Jug1 golpea a Opon
w2s". Además de w2s me aparecen otros símbolos raros, hasta completar un total de cuatro. Dichos símbolos aparecen tras un salto de línea... ¿A qué se debe?

Espero vuestra ayuda. Un saludo, Alejandro.


Más información sobre la lista de distribución Cconclase