在 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 中的换行符的主要内容,如果未能解决你的问题,请参考以下文章