内联替换 std::stringstream 中的字符

sta*_*ser 6 c++ replace stringstream

我想知道是否可以使用 std::replace 将字符串流中的双引号替换为单引号。

我有:

std::replace(
    std::ostreambuf_iterator<char>(ssScript),
    std::ostreambuf_iterator<char>(),
    '"', '\''
);
Run Code Online (Sandbox Code Playgroud)

但当然 ostreambuf_iterator 没有默认构造函数,因此无法编译。

是否有另一种方法可以像这样在内联字符串流中替换字符的出现?

Rog*_*gus 7

该类std::stringstream提供了一个用于操作流的接口,而不是其内容。要操作流的内容,您必须获取字符串,对其进行操作,然后将字符串放入流中,如下所示:

#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>

int main(void)
{
    std::stringstream ss;
    ss << "\"this is a string in a stream\"";
    std::cout << "Before: " << ss.str() << std::endl;
    std::string s = ss.str();
    std::replace(s.begin(), s.end(), '"', '\'');
    ss.str(s);
    std::cout << "After: " << ss.str() << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

你得到:

之前:“这是流中的字符串”
之后:“这是流中的字符串”