文字列を2進数で読み取るときに、文字列temp
を逆にする方法を理解しようとしています。
istream& operator >>(istream& dat1d, binary& b1)
{
string temp;
dat1d >> temp;
}
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';
}
試して
string reversed(temp.rbegin(), temp.rend());
[〜#〜] edit [〜#〜]:要求に応じてエラボレートします。
string::rbegin()
とstring::rend()
は、それぞれ「逆開始」と「逆終了」を表し、文字列に逆反復子を返します。これらは、rbegin()
が最後を指すように、標準イテレータインターフェイス(要素、つまり文字列の文字、および「次の」要素に進むoperator*
を逆参照するoperator++
)をサポートするオブジェクトです。文字列の文字、rend()
は最初の文字を指し、イテレータを進めるとprevious文字に移動します(これが逆イテレータになります) 。
最後に、これらのイテレータを渡すコンストラクタは、次の形式の文字列コンストラクタです。
template <typename Iterator>
string(Iterator first, Iterator last);
これは、文字の範囲を示す任意のタイプの反復子のペアを受け入れ、文字列をその文字の範囲に初期化します。