web-dev-qa-db-ja.com

std :: stringを逆にする方法は?

文字列を2進数で読み取るときに、文字列tempを逆にする方法を理解しようとしています。

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

    dat1d >> temp;    
}
22
Kameron Spruill

2進数を含む文字列の意味がわかりません。ただし、文字列(または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';
}
51
Max Lybbert

試して

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

[〜#〜] edit [〜#〜]:要求に応じてエラボレートします。

string::rbegin()string::rend()は、それぞれ「逆開始」と「逆終了」を表し、文字列に逆反復子を返します。これらは、rbegin()が最後を指すように、標準イテレータインターフェイス(要素、つまり文字列の文字、および「次の」要素に進むoperator*を逆参照するoperator++)をサポートするオブジェクトです。文字列の文字、rend()は最初の文字を指し、イテレータを進めるとprevious文字に移動します(これが逆イテレータになります) 。

最後に、これらのイテレータを渡すコンストラクタは、次の形式の文字列コンストラクタです。

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

これは、文字の範囲を示す任意のタイプの反復子のペアを受け入れ、文字列をその文字の範囲に初期化します。

29
HighCommander4