나는 주로 ostream_iterator를 사용하여 C++에서 toString 메서드를 구현하고있다.출력을 ostream_iterator에서 문자열로 변환하려면 어떻게해야합니까?
std::ostream_iterator<int> output(std::cout, " ");
콘솔로 인쇄 한 후 ostream_iterator의 출력을 문자열로 반환하고 싶습니다. 이 직접 변환이 가능합니까?
나는 주로 ostream_iterator를 사용하여 C++에서 toString 메서드를 구현하고있다.출력을 ostream_iterator에서 문자열로 변환하려면 어떻게해야합니까?
std::ostream_iterator<int> output(std::cout, " ");
콘솔로 인쇄 한 후 ostream_iterator의 출력을 문자열로 반환하고 싶습니다. 이 직접 변환이 가능합니까?
이 직접 변환이 가능합니까?
ostream_iterator
가 한 방향으로 스트리밍 데이터를 전송하는 데 사용되기 때문에
나는, 아니, 생각, 그래서 대상이 경우 std::cout
당신은 다시 데이터를 얻을 수 ostream_iterator
을 사용할 수 없습니다.
하지만 다른 목적지를 사용할 수 있습니다. ostringstream
개체를 만든 다음 두 출력에 모두 cout
을 사용하고 원하는대로 다시 사용하십시오.
std::stringstream buff;
std::ostream_iterator<int> output(buff, " ");
std::istringstream str("10 3 ABC 7 1");
// just copy only first integer values from str (stop on the first non-integer)
std::copy(std::istream_iterator<int>(str), std::istream_iterator<int>(), output);
// output as a string to std output
std::cout << buff.str() << std::endl;
// do something else
buff.seekp(0, std::ios::end);
std::cout << "String size is " << buff.tellp() << std::endl;
당신은 STL 컨테이너 인터페이스가 아닌 std::ostream
인터페이스를 사용하는 문자열과 같은 개체를 원하는 경우, 즉 std::stringstream
, 또는 일반적인 래퍼로 사용되지 않는 std::strstream
가장 가까운 것은 그 cout <<
을 사용하여 std::string
으로 serialize 할 수있는 모든 항목을 std::stringstream
에 쓰고 데이터를 다시 읽는 것이 좋습니다. 이것은 결국 적어도 하나의 값 비싼 사본을 만드는 것입니다. 여기에 구현입니다 : 문자열로 그 복사 그림과 같이
#include <cstdlib>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
using std::cout;
using std::endl;
using isit = std::istream_iterator<char>;
template <typename T> std::string to_string(const T& x)
// Must be able to print a T with std::ostream::operator<<.
{
std::stringstream buffer;
buffer << x;
const isit begin(buffer); // The start of the stream object.
static const isit end; // Default object is the end-of-stream iterator.
return std::string(begin, end);
}
int main(void)
{
const std::string output_string = to_string("Testing:") + " " +
to_string(1) + ", " + to_string(2ULL) + ", " + to_string(3.0) +
to_string('.');
cout << output_string << endl;
return EXIT_SUCCESS;
}
당신은 다음 std::stringstream
보다는 <<
및 std::istream_iterator<char>
에 작성하는 std::ostream_iterator<char>
를 사용할 수 있습니다.
std::istream
에서 std::istream_iterator
으로 std::string
으로 데이터를 쓸 수 있습니다. 일종의. 서식이 어색 할 수 있습니다. 당신이 반복자를 사용하여 std::string
에서 데이터를 읽으려면
, 그 반복자 유형은 std::string::iterator
하고 문자열의 전면에 반복자는 다른 STL 컨테이너처럼 s.begin()
입니다.
출력 반복자와 문자열 모두에 보낼 데이터가 메모리에 저장되어있는 경우 다른 생성자 중 하나를 사용할 수 있습니다.
예, 단지 cout을 stringstream으로 바꾸면 문자열을 만들 수 있습니다.
std::stringstream ss; // #include <sstream>
std::ostream_iterator<int> output(ss, " ");
std::string s(ss.str());
아니, 당신은 대신 이제 stringstream에 출력 뭔가를 할 필요가있을 것이다' –
예를 cout'. 내 대답의 샘플 코드. – Davislor