简体   繁体   中英

can I std::find a string in a stringstream?

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?

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM