在 C++ 中摆脱 CString 中的换行符

Posted

技术标签:

【中文标题】在 C++ 中摆脱 CString 中的换行符【英文标题】:Getting rid of newline in CString in C++ 【发布时间】:2012-07-31 10:21:56 【问题描述】:

我有一个最初是 CString 的 html/xml 文档,我想去掉所有的换行符,基本上将所有内容放在一行中。我尝试将其转换为 std::String 并使用:

#include <algorithm>
#include <string>

str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());

但是没有用。

【问题讨论】:

如果你有一个 char*(我从你的主题解释的 c 字符串),为什么不沿着每个 char 移动并使用这样的东西:if(string[i] == '\n') string[i] = ' '; 不完全是一本书如何描述好的代码(因为可能有用于此目的的特殊功能)但这将是一个有效的修复。 这是我说的 CString:msdn.microsoft.com/en-us/library/ms174288.aspx 在 Windows 上,换行符不是“\n”而是“\r\n”。 除非您想用另一个字符(例如空格)替换换行符,否则没有任何方法可以做到这一点。你可以做的是遍历字符串中的每个字符,将它们附加到另一个字符串,除非当前字符是换行符,完成后你有一个不包含换行符的新字符串。 看来我可能错了...Remove 函数呢? 【参考方案1】:

为了防止您的文本块看起来很奇怪,您需要用空格替换换行符。确保同时替换换行符('\n')和回车符('\r')。

CString str = "Line 1 Windows Style\r\n Line 2 Unix Style\n Line 3";
str.Replace('\r', " ");
str.Replace('\n', " ");
str.Replace("  ", " ");

【讨论】:

【参考方案2】:

你只需要使用方法remove

CString str = _T("Test newline \nremove"), str2;
str.Remove('\n');

【讨论】:

【参考方案3】:

怎么样?

str.Replace("\n", "");

记录在案的here

【讨论】:

以上是关于在 C++ 中摆脱 CString 中的换行符的主要内容,如果未能解决你的问题,请参考以下文章

剥离(摆脱)%0A(换行符的 URL 编码)

CString 中的转义字符

如何在 Scintilla 中隐藏换行符?

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

怎么用c++读取文本文件中的换行符和空格?

C++中的换行问题,就是某条语句太长,怎么把它分为两行或者三行?