web-dev-qa-db-fra.com

Comment inverser une chaîne std ::?

Im essayant de comprendre comment inverser la chaîne temp lorsque j'ai la chaîne lue en nombres binaires

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

    dat1d >> temp;    
}
22
Kameron Spruill

Je ne sais pas ce que vous entendez par une chaîne qui contient des nombres binaires. Mais pour inverser une chaîne (ou tout autre conteneur compatible STL), vous pouvez utiliser std::reverse(). std::reverse() fonctionne en place, vous pouvez donc commencer par faire 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';
}
51
Max Lybbert

Essayer

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

MODIFIER : Élaborer comme demandé.

string::rbegin() et string::rend(), qui représentent respectivement "reverse begin" et "reverse end", renvoient itérateurs inversés dans la chaîne. Ce sont des objets supportant l'interface de l'itérateur standard (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"), tels que rbegin() pointe vers le dernier caractère de la chaîne, rend() pointe vers le premier, et avancer l'itérateur le déplace vers le précédent caractère (c'est ce qui en fait un itérateur inversé).

Enfin, le constructeur dans lequel nous passons ces itérateurs est un constructeur de chaîne de la forme:

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

qui accepte une paire d'itérateurs de tout type indiquant une plage de caractères et initialise la chaîne à cette plage de caractères.

29
HighCommander4