Reputation: 863
I have a stringstream that I'd like to iterate and determine if a substring exists in it.
I know that I could just convert to a string and do std::string::find(), but I was just hoping to avoid the conversion from stringstream to string if possible.
I understand the following won't work because the istream_iterator uses char as its type (not string)
stringstream ssBody;
string sFindThis;
...
auto itr = std::find (
istreambuf_iterator<char>(ssBody),
istreambuf_iterator<char>(),
sFindThis
);
But can I somehow search for a string in stringstream with std::find or similar without a conversion to string?
Upvotes: 7
Views: 10627
Reputation: 15837
using pubsetbuf it is possible to associate a buffer with basic_stringbuf member and then search the buffer, however behavior of this function is implementation defined. explanations and the example are from http://en.cppreference.com/w/cpp/io/basic_stringbuf/setbuf
#include <iostream>
#include <sstream>
int main()
{
std::ostringstream ss;
char c[1024] = {};
ss.rdbuf()->pubsetbuf(c, 1024);
ss << 3.14 << '\n';
std::cout << c << '\n';
}
Upvotes: 3
Reputation: 118340
The C++ standard does not define any std::[io]?stringstream
methods for searching its contents.
Neither can you use std::istreambuf_iterator
together with std::search()
, since std::istreambuf_iterator
is an input iterator, but std::search()
requires a forward iterator.
The only effective way to search a string stream is to convert it to a std::string
, first.
Upvotes: 7