如何用CRLF替换字符串中的CR出现?

时间:2018-07-12 09:04:18

标签: c++11 stl

我尝试使用std::replace算法:

replace(out.begin(), out.end(), '\r', '\r\n');    // error
replace(out.begin(), out.end(), "\r", "\r\n");    // error
replace(out.begin(), out.end(), "\\r", "\\r\\n"); // error

我总是会得到参数不明确的错误。我究竟该如何指定\r\n以便编译器不会抱怨?

编辑:

错误:

 could not deduce template argument for 'const _Ty &' from 'const char [5]' 
 template parameter '_Ty' is ambiguous
'replace': no matching overloaded function found    

1 个答案:

答案 0 :(得分:3)

虽然原则上可以通过标准/ Boost函数的某种组合来解决,但它的特定性足以获得其自身的功能,因此也具有其自身的隐含性。可能就是这样简单:

std::string cr_to_crlf(std::string const& s) {
    std::string result;
    result.reserve(s.size());

    for (char c : s) {
        result += c;
        if (c == '\r') {
            result += '\n';
        }
    }
    return result;
}