2011-02-09 64 views
12

林試圖找出如何扭轉串temp當我在二進制數讀取字符串如何反轉std :: string?

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

    dat1d >> temp;  
} 
+1

你是什麼意思「在二進制數讀」是什麼意思?該字符串將有像「1100110」?你是從磁盤讀取二進制文件? – 2011-02-10 00:15:11

回答

19

嘗試

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

編輯:按要求詳細說明。

string::rbegin()string::rend(),這分別代表「反轉開始」和「反轉端」,返回反向迭代器到字符串。這些是支持標準迭代器接口的對象(operator*以取消引用元素,即字符串的字符,而operator++前進到「下一個」元素),這樣rbegin()指向字符串的最後一個字符,rend()指向第一個,並推進迭代器將其移動到以前的字符(這是什麼使它成爲一個反向迭代器)。

最後,我們傳遞這些迭代到構造的形式爲一個字符串構造:

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

它接受一對任何類型表示一個字符範圍的迭代器,以及串初始化到字符範圍。

+0

您能否詳細說明解決方案 – 2017-02-16 08:41:28

+0

@MinkeshJain:完成,請參閱我的編輯。 – HighCommander4 2017-02-16 18:55:33

29

我不確定你的意思是什麼含有二進制數字的字符串。但是,對於字符串(或任何兼容STL的容器),您可以使用std::reverse()std::reverse()工作在地方,所以你可能想使字符串第一個副本:

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