【问题标题】:Getting rid of newline in CString in C++在 C++ 中摆脱 CString 中的换行符
【发布时间】: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] = ' '; 不完全是一本书如何描述好的代码(因为可能有用于此目的的特殊功能)但这将是一个有效的修复。
  • 在 Windows 上,换行符不是“\n”而是“\r\n”。
  • 除非您想用另一个字符(例如空格)替换换行符,否则没有任何方法可以做到这一点。你可以做的是遍历字符串中的每个字符,将它们附加到另一个字符串,除非当前字符是换行符,完成后你有一个不包含换行符的新字符串。
  • 看来我可能错了...Remove 函数呢?

标签: c++ xml string newline cstring


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2010-10-12
        相关资源
        最近更新 更多