Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ZString] Fonction de remplacement...

void ZString::remplacer(char* chaine, char* chaineDeRemplacement)

Sujet résolu
    31 mars 2008 à 22:18:11

    Bonsoir !
    Après une journée d'enfer, je ne vois toujours pas le problème dans mon code...
    C'est pourquoi je m'adresse à vous.

    Le plus étonnant reste pour moi que le code compile mais provoque une erreur Windows...

    Si vous y trouvez à redire... n'hésitez-pas !

    voilà le code :
    1. void ZString::remplacer(char* chaine, char* chaineDeRemplacement)
    2. {
    3.     int tailleRemplacement = longueur(chaineDeRemplacement);
    4.     int tailleChaine = longueur(chaine);
    5.     int difference = tailleRemplacement-tailleChaine;
    6.     char* chaineIntermediaire = NULL;
    7.     int position = rechercher(chaine);
    8.     while ( position != -1)
    9.     {
    10.         int longueurIntermediaire = m_longueur+difference;
    11.         //Creation d'une nouvelle chaine assez grande.
    12.         chaineIntermediaire= new char[longueurIntermediaire];
    13.         //On y replace le début de la chaine
    14.         for(int j=0; j<position; j++)
    15.         {
    16.             chaineIntermediaire[j] = m_chaine[j];
    17.         }
    18.         //Puis le nouveau morceau
    19.         for(int j=0; j<tailleRemplacement; j++)
    20.         {
    21.             chaineIntermediaire[j+position] = chaineDeRemplacement[j];
    22.         }
    23.         //Et enfin le reste de la chaine...
    24.         for(int j=0; j<= m_longueur-position-tailleRemplacement ; j++)
    25.         {
    26.             chaineIntermediaire[position+tailleRemplacement+j] =
    27.                 m_chaine[position+tailleChaine+j];
    28.         }
    29.         //et le caractere de fin
    30.         chaineIntermediaire[longueurIntermediaire]='\0';
    31.         //Suppression de l'ancienne chaine, réallocation
    32.         delete[] m_chaine;
    33.         m_chaine = chaineIntermediaire;
    34.         chaineIntermediaire = NULL;
    35.         m_longueur = longueurIntermediaire;
    36.         //Et on reprend la recherche après ce qu'on a ajouté
    37.         position += difference;
    38.         position = rechercher(chaine, position);
    39.     }
    40. }


    et celui de la fonction "rechercher()"

    1. int ZString::rechercher(const char* chaine, int positionDepart) const
    2. {
    3.     int i=0, position = positionDepart;
    4.     int longueurChaine = longueur(chaine);
    5.     while(position<m_longueur)
    6.     {
    7.         if (m_chaine[position] == chaine[i])
    8.         {
    9.             i++;
    10.             if (i==longueurChaine)
    11.             {
    12.                 return (position-i+1);/*On veut le 1er caractere de la chaine,
    13.                 pas celui avant... --> +1 */
    14.             }
    15.         }
    16.         else i=0;
    17.         position++;
    18.     }
    19.     return -1;
    20. }


    Merci d'avance de votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2008 à 0:40:23

      1. chaineIntermediaire= new char[longueurIntermediaire];
      2. ...
      3. //et le caractere de fin
      4. chaineIntermediaire[longueurIntermediaire]='\0';


      Il serait pas vaguement en dehors de la zone allouée celui-ci ?
      J'aurais plutot dit :
      1. chaineIntermediaire[longueurIntermediaire-1]='\0';
      • Partager sur Facebook
      • Partager sur Twitter
        1 avril 2008 à 13:42:27

        Merci pour ton aide, c'était presque ça...
        Il fallait en fait mettre

        1. chaineIntermediaire= new char[longueurIntermediaire+1];
        2. // Le "+1" pour pouvoir placer le '\0' après la chaine...


        Et maintenant ça marche !

        Encore merci.
        • Partager sur Facebook
        • Partager sur Twitter

        [ZString] Fonction de remplacement...

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown