【问题标题】:How to replace ^M with blank space C++如何用空格替换 ^M C+​​+
【发布时间】:2016-04-21 06:54:31
【问题描述】:

我正在用 C++ 编写代码,其中输入字符串类似于

\n{^M "id": "二",^M "guid": "49709bb3-7444-40bf-9032-cc65e36d26f5",^M "isActive": true,^M
"余额": "1645.00",^M "图片": "http://placehold.it/32x32",^M
"年龄": 28,^M "姓名": "Elvira Odom",^M "性别": "女",^M
“公司”:“豪门”,

我无法控制输入字符串。

我需要将存储在 p1f0->str 中的这个字符串打印到一个文件中并解析它以用于其他目的。

但是 ^M 字符在解析时搞砸了,因此,我想摆脱它。

所以,为了摆脱 ^M 字符,我正在这样做,但它不起作用-

struct specialStr {
  uint32 len;
  char str[0];
}
specialStr p111;
p111....
....
std::string raww = (char*) p111->str;
boost::replace_all( raww, "^M", " ");
strncpy(p111->str, raww.c_str(), sizeof(raww));
p111->len = (uint32) (raww.size());
p111->str[p111->len - 1] = 0;

但是好像一点效果都没有。

有人可以告诉我我在这里做错了什么吗? 谢谢

【问题讨论】:

  • 什么意思?我粘贴的不是可编译的代码。这只是一个示例 sn-p!
  • p111->str 的大小为 0...
  • 这是什么:std::string raww = (char*) p111->str;???
  • 我这样做是为了可以在 char 数组上使用 boost/std 字符串函数
  • 你确定^M 不是\r

标签: c++ string boost std


【解决方案1】:

序列^M 是您的编辑器显示控制代码 M、ASCII 代码 13:回车的方式。

您可以在 C 或 C++ 中轻松地将其编码为 "\r"

【讨论】:

  • 太棒了。这是我期待讨论的方向。谢谢你的评论。我知道 ^M 是 Windows 回车 0x0D 0x0A。但是,我如何用空格替换它,所以我只是摆脱了所有 ^M。这可能吗?
  • CR 是 0x0D(0x0A 是换行符,在 Windows 文本文件中 CR+LF 表示换行符,但这可能不相关。它可能解释了你是如何得到流浪 CR 又名 ^M 字符的)
  • 明白了。 >>您可以在 C 或 C++ 中轻松地将其编码为“\r”。我怎么做?我无法更改我的输入,但我可以编辑/替换收到的字符串上的字符(使用 ^M)。如何将其编码为 \r?像这样的东西? std::replace(raww.begin(), raww.end(), '^M', ' ');但这不起作用。 :(
  • 只需输入字符'\r'。就像您输入字符“^M”一样,只是它们是键盘上的不同键。
  • 我将其更改为 - std::replace( raww.begin(), raww.end(), '\r', ' '); 但这似乎也没有任何效果。我最终写入的文件按原样保留了 ^M。
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2010-12-03
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多