Les chaînes C ++ peuvent être déclarées de deux manières principales: en tant que pointeur constant vers les caractères (tableau de chars) ou instanciés à partir de la classe de chaîne de la bibliothèque de chaînes. Ici, les fonctions pop_back () et efface () sont de l'objet String, instanciées à partir de la classe de chaîne. Le dernier élément d'un tableau de bouches ne peut pas être supprimé car un tableau de bouches n'est pas un objet instancié.
Il est vrai qu'un littéral de cordes se compose de valeurs qui sont des caractères. Chaque caractère est dans un élément. Donc le littéral des cordes se compose réellement d'éléments. Le dernier caractère est supprimé avec son dernier élément.
Cet article explique comment supprimer le dernier élément d'une chaîne, ainsi que son caractère.
Contenu de l'article
void pop_back ()
Cette fonction membre de la classe String supprime le dernier élément de la chaîne. La fonction renvoie vide. Cela signifie que rien n'est renvoyé, et aucune variable ne peut recevoir quoi que ce soit. L'utilisation de cette fonction est illustrée dans le programme suivant:
#inclure
#inclure
Utilisation de Namespace Std;
int main()
String str = "lmnopqr";
couter <Str.pop_back ();
pour (int i = 0; icouter < couter < retour 0;
La sortie est:
Lmnopqr
Lmnopq
Le dernier caractère a été supprimé. Les deux premières lignes du programme comprennent les bibliothèques nécessaires. L'un d'eux, bien sûr, est la bibliothèque de chaînes. La bibliothèque de chaînes doit être incluse car toutes les chaînes impliquées sont instanciées à partir de la classe de chaîne. La ligne suivante est une déclaration. Il déclare que tous les noms en dessous sont de l'espace de noms standard, sauf indication contraire.
Le corps de fonction Main () commence par la déclaration (instanciation) de l'objet String. L'instruction suivante affiche le littéral de cette chaîne nouvellement déclarée à la sortie. La déclaration après supprime le dernier caractère, en utilisant la fonction membre POP_BACK (). Le segment de code suivant utilise une boucle pour les index pour afficher tous les caractères, qui n'ont plus le dernier, dans une séquence continue.
Iterator Erase (const_iterator p)
Si l'itérateur pointe vers le dernier élément (caractère), alors la fonction de membre d'effacement peut supprimer le dernier élément. Cette fonction renvoie un itérateur qui pointe vers l'élément juste après celui supprimé (ou juste après le dernier élément, si celui supprimé était le dernier élément). Le programme suivant illustre ceci:
#inclure
#inclure
Utilisation de Namespace Std;
int main()
String str = "lmnopqr";
couter <String :: iterator p = str.fin();
P--;
String :: iterator it = str.effacer (p);
pour (int i = 0; icouter < couter < retour 0;
La sortie est:
Lmnopqr
Lmnopq
Les trois premières lignes du programme sont expliquées de la même manière que du programme précédent. Dans le corps de fonction Main (), la première instruction déclare l'objet String. L'instruction suivante affiche le littéral de cette chaîne nouvellement déclarée à la sortie. Cette impression aurait encore pu être faite avec une boucle pour. La déclaration après obtient un itérateur qui pointe juste après le dernier élément de caractère. Cela se fait avec la fonction membre, end (). Notez la façon dont l'itérateur a été déclaré (côté gauche de, =). Ensuite, l'itérateur est décrémenté pour pointer vers le dernier élément.
Ensuite, le dernier élément est supprimé avec la fonction de membre effacer (). Le segment de code suivant utilise une boucle pour les index pour afficher tous les caractères, qui n'ont plus le dernier au terminal en une séquence continue.
Iterator effacer (const_iterator d'abord, const_iterator dernier)
Cette fonction membre effacerait une gamme d'éléments de caractère hors de la chaîne. Ici, le premier est un itérateur qui pointe vers le premier élément de la gamme. L'itérateur a retourné des points à l'élément qui était là, juste après la gamme. S'il n'y avait pas d'éléments là-bas, cela pointerait jusqu'à la fin de la chaîne. Le dernier est un itérateur qui pointe vers le dernier élément de la plage. Ce dernier élément n'est pas impliqué dans l'effacement.
Pour supprimer le dernier élément, l'astuce consiste à faire «Last», point juste au-delà du dernier élément de la chaîne; et faire le «premier» point au dernier élément de la chaîne. Avec tout cela, la fonction d'effacement enlèvera le dernier élément. Le programme suivant montre comment cela se fait:
#inclure
#inclure
Utilisation de Namespace Std;
int main()
String str = "lmnopqr";
couter <String :: iterator p = str.commencer();
p = p + 6;
String :: iterator q = str.fin();
String :: iterator it = str.effacer (p, q);
pour (it = --it; it> = str.commencer(); il--)
couter << *it;
couter <retour 0;
La sortie est:
Lmnopqr
Qponml
Après avoir retiré le personnage, R (avec son élément), la chaîne restante a été imprimée de caractère par personnage, mais dans l'ordre inverse.
Les trois premières lignes du programme sont expliquées de la même manière que du programme précédent. Dans le corps de fonction Main (), la première instruction déclare l'objet String. La déclaration suivante imprime la chaîne nouvellement déclarée.
Le segment de code qui suit a trois déclarations. Le premier déclare un itérateur qui pointe vers le premier caractère de la chaîne. Six autres caractères de la chaîne doivent être comptés avant le dernier caractère, «R» est atteint. Ainsi, la deuxième déclaration de ce segment ajoute 6 à l'itérateur. La déclaration suivante de ce segment déclare un itérateur, Q, qui pointe juste après la fin de la chaîne. La situation est désormais prête à effacer le dernier élément: Q pointe juste après «R» et P pointe vers «R».
La déclaration qui efface «R» est:
String :: iterator it = str.effacer (p, q);
Une fois que «r» est effacé, le dernier personnage devient «q». L'itérateur retourné, «it» ici, pointe juste après «Q».
Le segment de code suivant est une boucle pour. L'énoncé d'initialisation de cette boucle diminue simplement «il» pour pointer vers le nouveau dernier caractère, «Q». 'Q' est imprimé au terminal. La boucle forte continue de diminuer «it», imprimant le caractère correspondant, tandis que «il» est supérieur à Str.commencer(). Quand «it» est égal à Str.begin (), c'est-à-dire que «il» pointe vers «l», les imprimés pour la boucle «l» et s'arrête. De cette façon, la chaîne sans «r» est imprimée dans l'ordre inverse.
Pour obtenir la valeur indiquée vers un itérateur, précédez l'itérateur avec l'opérateur d'indirection, * .
BASIC_STRING & ERASE (size_type pos = 0, size_type n = NPOS)
Cette fonction membre efface une gamme, tout comme la fonction ci-dessus. Cependant, il utilise des index et non des itérateurs. Si l'argument POS est 0, alors la plage commence à partir du premier élément. Si l'argument N est la longueur de la chaîne (nombre de caractères), alors la plage se termine au dernier caractère. Les deux arguments ont leurs valeurs par défaut. Cette fonction renvoie l'objet de classe de chaîne, avec les caractères de la plage supprimée.
L'astuce à jouer ici est de faire de la valeur de pos l'indice du dernier personnage. L'indice du dernier caractère (élément) est la taille (longueur) de la liste moins 1. Le deuxième argument ici doit être omis pour ce problème. Le dernier index est donné par,
Str.size () - 1
Le programme suivant, utilise cette fonction de membre, pour enlever le dernier caractère, 'r' de la chaîne:
#inclure
#inclure
Utilisation de Namespace Std;
int main()
String str = "lmnopqr";
couter <int l = str.size () - 1;
String ret = str = stry.effacer (l);
pour (int i = 0; icouter < couter < pour (int i = 0; i couter < couter < retour 0;
La sortie est:
Lmnopqr
Lmnopq
Lmnopq
La chaîne originale et retournée a perdu 'r'. Les trois premières lignes du programme sont expliquées de la même manière que du programme précédent. Dans le corps de fonction Main (), la première instruction déclare l'objet String. La déclaration suivante imprime la chaîne nouvellement déclarée.
L'instruction suivante détermine l'index du dernier élément de la chaîne d'origine. La déclaration après efface le dernier caractère en utilisant cet index. Le segment de code suivant imprime les caractères de la chaîne de retour, une par une, en utilisant des index. Le dernier segment de code imprime les caractères de la chaîne d'origine, une par une, en utilisant des index.
Conclusion
La fonction de membre de la classe de chaîne normale, pour supprimer le dernier caractère d'une chaîne, avec son élément qui le tient, est la fonction pop_back (). Il existe trois fonctions de membre surchargées effacées () qui peuvent également être utilisées pour cela. L'un d'eux prend un itérateur qui pointe vers le dernier caractère et supprime le dernier personnage. Un autre prend une portée, indiquée par deux itérateurs: un itérateur pointe vers le dernier personnage, et les autres points juste après le dernier personnage. Avec cela, le dernier personnage est enlevé. La troisième fonction surchargée utilise l'index du dernier caractère pour le supprimer. Toute la discussion de cet article a été conforme au C ++ 20.