2017-10-20 47 views
0

J'essaie de répliquer la méthode std :: string :: insert. Voici mon code. Cependant, en utilisant le code, mon application se bloque parfois tout en déplaçant les caractères vers la droite. Est-ce que quelqu'un peut me signaler quel pourrait être le problème et comment le réparer?Réplication de std :: string :: insert (int pos, char ch)

Merci beaucoup d'avance!

+1

Créer un [mcve] – user2079303

+0

Si ceci est votre code actuel, votre Redimensionner devrait être 'redimensionner (m_length +1)', sinon vous êtes réellement m_length par 1 qui augmenterez explosera 'm_data [m_length] = '\ 0'; 'en plus de causer d'autres problèmes. Bien que j'ai besoin de voir «redimensionner» pour savoir à coup sûr ... – zzxyz

+1

@ Zack Lee Cette boucle pour (int i = len-1; i> = 0; i--) {// déplacer les caractères vers la droite p [i + 1] = p [i]; } n'a pas de sens. Vous devez déplacer les éléments à partir de la position. C'est l'expression p + len qui peut être en dehors de la chaîne. –

Répondre

1

Vous déplacez trop de caractères. Vous devez seulement déplacer len - pos caractères, pas len caractères.

Et si vous ne soustrayez pas 1 lors de l'initialisation i, la boucle décale l'octet nul existant, vous n'avez donc pas besoin de l'ajouter séparément à la fin.

string& string::insert(int pos, char ch) 
{ 
    int len = m_length; //the length of the current string 
    resize(++m_length); //a method to resize the current string(char *) 
    char *p = m_data + pos; //a pointer to the string's insert position 
    for (int i = len - pos; i >= 0; i--) { //shift characters to the right 
     p[i+1] = p[i]; 
    } 
    *p = ch; //assign the character to the insert position 
    return *this; 
} 
+0

Cela a parfaitement résolu le problème. Merci beaucoup @Barmar –