2011-02-09 22 views
12

임 이진수로 문자열을 읽을 때 문자열 temp을 뒤집는 방법을 알아 내려고하는 중입니다.std :: string을 뒤집는 방법?

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

    dat1d >> temp;  
} 
+1

"2 진수로 읽음"이란 무엇을 의미합니까? 그 문자열은 "1100110"과 같은 것을 가질 것입니까? 디스크에서 바이너리 파일을 읽는 중입니까? –

답변

19

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

편집을 시도해보십시오 요청에 따라 부연. 정치

string::rbegin()string::rend(), "시작 리버스"과 "반대 끝을"각각의 문자열로 역 반복자에게을 반환합니다. 표준 반복자 인터페이스 (요소를 참조하는 operator*, 즉 문자열의 문자를 참조하지 않고 operator++을 "다음"요소로 이동)를 지원하는 객체이므로 rbegin()은 문자열의 마지막 문자 인 rend()을 가리 킵니다. 첫 번째 것은 반복자를 앞뒤로 이동하여 이전의 문자로 이동합니다 (이것이 역 반복자가됩니다).

마지막으로, 우리는에이 반복자를 전달하는 생성자는 형식의 문자열 생성자는 다음과 문자 범위를 나타내는 모든 유형의 한쌍의 반복자를 받아, 그에게 문자열을 초기화

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

문자의 범위.

+0

해결책을 상세히 설명해 주시겠습니까 –

+0

@MinkeshJain : 완료, 제 편집을 참조하십시오. – HighCommander4

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

값을 반환하지 않으므로 void 함수 여야합니다. –

+0

'std :: reverse' **는 ** void 함수입니다. http://en.cppreference.com/w/cpp/algorithm/reverse. –

+0

@MaxLybbert 예, ** 그러나 **,'main()'은 구현 될 때 'void'가 아니며 값을 반환해야합니다. 이것은 @Wilhelm이 지적하려고했던 것입니다. – karlphillip

관련 문제