2011-02-09 11 views
12

Im tratando de encontrar la manera de revertir la cadena temp cuando tengo la cadena leído en números binariosCómo invertir una std :: string?

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

    dat1d >> temp;  
} 
+1

¿Qué quiere decir por "leer en números binarios"? ¿Que la cuerda tendrá algo así como "1100110"? ¿Estás leyendo un archivo binario fuera del disco? –

Respuesta

19

Trate

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

EDITAR: La elaboración de lo solicitado.

string::rbegin() y string::rend(), que significan "Reverse comenzar" y "final de la inversión", respectivamente, volver iteradores inversa en la cadena. Estos son objetos que admiten la interfaz del iterador estándar (operator* para desreferenciar a un elemento, es decir, un carácter de la cadena, y operator++ para avanzar al elemento "siguiente"), de modo que rbegin() apunta al último carácter de la cadena, rend() puntos a el primero, y avanzando el iterador lo mueve al anterior (esto es lo que lo convierte en un iterador reverso).

Finalmente, el constructor estamos pasando estos iteradores en es un constructor cadena de la forma:

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

que acepta un par de iteradores de cualquier tipo que denota un rango de caracteres, e inicializa la cadena para que rango de personajes

+0

Puede por favor elaborar la solución –

+0

@MinkeshJain: listo, por favor vea mi edición. – HighCommander4

29

No estoy seguro de lo que quiere decir con una cadena que contiene números binarios. Pero para invertir una cadena (o cualquier contenedor compatible con STL), puede usar std::reverse(). std::reverse() opera en su lugar, por lo que es posible que desee hacer una copia de la cadena primero:

#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'; 
} 
+0

Debe ser una función vacía ya que no devuelve un valor –

+0

'std :: reverse' ** es ** una función' void': http://en.cppreference.com/w/cpp/algorithm/reverse. –

+0

@MaxLybbert Sí, ** sin embargo **, 'main()' ya que está implementado no es 'void' y debería devolver un valor. Esto es lo que @Wilhelm estaba tratando de señalar. – karlphillip