0

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

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

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

编辑:感谢各位的回答,辛苦了!

4

4 回答 4

2

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

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

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

std::string& rtrim(std::string& str) {
    size_t endpos = str.find_last_not_of("\r\n");
    if(endpos != std::string::npos) {
        str.substr(0,endpos+1).swap(str);
    }
    return str;
}
于 2013-01-30T00:10:29.540 回答
1

在某些实现上,例如 Windows,使用“r”的读取模式或“w”的写入模式将导致“\r\n”在您打算通过“\n”时被读取/写入。使用“wb”或“rb”。对于 iostream 函数,我相信你需要传入 ios::binary 标志。

于 2013-01-30T00:08:57.283 回答
0

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

于 2013-01-30T00:21:08.567 回答
0

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

于 2013-01-30T00:14:09.717 回答