44 votes

Comment inverser une std::string ?

J'essaie de comprendre comment inverser la chaîne de caractères temp lorsque la chaîne est lue en nombres binaires

istream& operator >>(istream& dat1d, binary& b1)    
{              
    string temp; 

    dat1d >> temp;    
}

84voto

Max Lybbert Points 11822

Je ne sais pas ce que vous entendez par une chaîne de caractères contenant des nombres binaires. Mais pour inverser une chaîne (ou tout autre conteneur compatible STL), vous pouvez utiliser std::reverse() . std::reverse() fonctionne à la place, il peut donc être utile de faire d'abord une copie de la chaîne :

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
    std::string foo("foo");
    std::string copy(foo);
    std::cout << foo << '\n' << copy << '\n';

    std::reverse(copy.begin(), copy.end());
    std::cout << foo << '\n' << copy << '\n';
}

60voto

HighCommander4 Points 9962

Essayer

string reversed(temp.rbegin(), temp.rend());

EDITAR : Élaborer comme demandé.

string::rbegin() y string::rend() qui signifient respectivement "début inversé" et "fin inversée", renvoient itérateurs inversés dans la chaîne. Il s'agit d'objets supportant l'interface standard des itérateurs ( operator* pour déréférencer un élément, c'est-à-dire un caractère de la chaîne, et operator++ pour passer à l'élément "suivant"), de telle sorte que rbegin() pointe sur le dernier caractère de la chaîne, rend() pointe sur le premier, et le fait d'avancer l'itérateur le déplace vers l'élément précédent (c'est ce qui en fait un itérateur inversé).

Enfin, le constructeur auquel nous passons ces itérateurs est un constructeur de chaîne de caractères de la forme :

template <typename Iterator>
string(Iterator first, Iterator last);

qui accepte une paire d'itérateurs de n'importe quel type représentant une plage de caractères, et initialise la chaîne à cette plage de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X