C++ 字符串中的回车和换行

use*_*363 4 c++ string carriage-return linefeed

我正在使用 C++ 处理一些 TCP/IP 连接设备的通信。设备要求发送的命令以\r\n 结束。

我正在使用一个配置文件,从中读取通信中使用的命令。

我遇到的问题是命令 \r\n 被解释为它们的 4 个字符,而不是作为回车和换行符。

我曾尝试使用 string.data(),但得到的结果与 string.c_str() 相同。

有没有什么好的功能可以从一开始就让它正确,还是我必须用正常的替换功能来解决这个问题?或者其他一些我没有想过的方式?

我想,如果我没有找到一个非常巧妙的方法来做到这一点,我只会在配置文件中省略 \r\n 并在之后添加它,但是如果没有任何困难,将它全部放在配置文件中会很好编码。我想如果我尝试用正确的字符替换四个字符 \r\n ,我还需要做一些硬编码。

谢谢你的帮助

编辑:配置文件包含这样的行。

MONITOR_REQUEST = "TVT?\r\n"

Jam*_*nze 5

如果配置文件中的数据需要翻译,则必须进行翻译。缺少正则表达式(这显然是矫枉过正),我不知道有任何标准函数可以做到这一点。我们使用类似的东西:

std::string
globalReplace(
    std::string::const_iterator begin,
    std::string::const_iterator end,
    std::string const& before,
    std::string const& after )
{
    std::string retval;
    std::back_insert_iterator<std::string> dest( retval );
    std::string::const_iterator current = begin;
    std::string::const_iterator next
            = std::search( current, end, before.begin(), before.end() );
    while ( next != end ) {
        std::copy( current, next, dest );
        std::copy( after.begin(), after.end(), dest );
        current = next + before.size();
        next = std::search( current, end, before.begin(), before.end() );
    }
    std::copy( current, next, dest );
    return retval;
}
Run Code Online (Sandbox Code Playgroud)

为了这。例如,您可以使用"\\r\\n", "\r\n"for last to 参数调用它。