【问题标题】:Replace text with GLib用 GLib 替换文本
【发布时间】:2018-05-29 01:37:32
【问题描述】:

我有一个包含大量\n 的字符串,我想将它们中的每一个都变成\001\n\001CW1 。使用 glib 最简单的方法是什么?没有正则表达式,只是简单的替换。

【问题讨论】:

  • 除了\n之外还有别的吗?你真的想要glib,而不是glibc
  • 不,仅此而已。是的,我真的在使用 glib,g_free 之类的东西。
  • 那么答案太小,无法发布为答案:strlen(string) / 2; g_malloc 空间够用,循环写你的序列。

标签: c glib


【解决方案1】:

这可以通过g_strsplitg_strjoinv 轻松完成:

char **split = g_strsplit(text, "\n", -1);
g_free(text);
text = g_strjoinv("\001\n\001CW1 ", split);
g_strfreev(split);

虽然这是脚本语言中非常常见的结构,但在 C/glib 中执行此操作有点奇怪,但我想这是正确/唯一的方法。

【讨论】:

  • 有很多分配和释放。但是,如果您必须使用 glib 函数来解决,那是正确的。
  • 我喜欢认为它知道高效分配。
  • 啊,是的,我问开发人员发现它效率很低。也许有一天我们会有一个 g_fast_strsplit 或其他东西。没什么大不了的,反正也不比使用脚本语言差。
【解决方案2】:

g_string_replace 从 2.68 版本开始实现:

https://developer.gnome.org/glib/stable/glib-Strings.html#g-string-replace

【讨论】:

  • 所选择的实现g_string_replace()实际上是在 2021 年 3 月在 GLib 2.68.0 中发布的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2011-02-14
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多