坚持从文本文件中删除"r"!C++

Stuck with removing " " from text files! C++

本文关键字:C++ 删除 文本 文件 坚持      更新时间:2023-10-16

好的,所以我几乎完成了一个程序。然而,虽然它可以在Windows上运行,但我更愿意在我的Mac上运行它来测试性能差异(我的Mac有更快的硬件)。

我有一个无序列图,它存储在文本文件中的值中,我也在复制此映射以反转键/值对。

文本文件不断添加新行,从研究中我发现这是因为 Windows 添加了它自己的回车符(为什么?!),并且它位于我地图中每个第二个元素的末尾。该文件是"stringx,stringy",因此我使用stringstream将字符串x和y拆分为键/值对。

编辑:感谢您的回答,伙计们,请客!

这不是

std::string::replace的工作方式,您应该在此处阅读它的工作原理。

为了进行基本的替换,您可以编写自己的函数来执行此操作,但是在您的情况下,这似乎是一个修剪问题,因为回车符通常位于字符串的右侧。

您可以通过执行以下操作来删除回车符和新行:

std::string& rtrim(std::string& str) {
    size_t endpos = str.find_last_not_of("rn");
    if(endpos != std::string::npos) {
        str.substr(0,endpos+1).swap(str);
    }
    return str;
}

在某些实现(如 Windows)上,当您打算传递""时,使用读取模式"r"或写入模式"w"将导致读取/写入"\r"。使用"wb"或"rb"。对于iostream函数,我相信你需要传入ios::binary标志。

Windows 使用"\r"结束行。通常,应该在各种平台上运行的程序使用一些#ifdef来处理类似的差异。

我想我现在明白问题是什么了。这不是关于处理代码的差异 - 您实际上是在尝试在非Dos/Windows机器上使用" DOS/Windows"文件 - 您需要使用dos2unix来修复文件上的行尾!