c++ - 修整 UTF8 缓冲区

标签 c++ c

我有一个包含 UTF8 数据的缓冲区。我需要删除前导和尾随空格。 这是为 ASCII 缓冲区执行此操作(就地)的 C 代码:

<pre>char *trim(char *s) { while( isspace(*s) ) memmove( s, s+1, strlen(s) ); while( *s && isspace(s[strlen(s)-1]) ) s[strlen(s)-1] = 0; return s; } </pre>

如何在 C/C++ 中为 UTF8 缓冲区做同样的事情?
附言 感谢有关 strlen() 的性能提示。回到特定于 UTF8 的问题:如果我需要一起删除所有空格,而不仅仅是开头和结尾的空格怎么办?此外,我可能需要删除所有 ASCII 代码 <32 的字符。这里是否有针对 UTF8 大小写的具体说明,例如使用 mbstowcs()?

最佳答案

您是否也想删除所有各种 Unicode 空格,还是只删除 ASCII 空格?在后一种情况下,您根本不需要修改代码。

无论如何,您使用的重复调用 strlen 的方法效率极低。它将一个简单的 O(n) 操作转化为至少 O(n^2)

编辑:假设您只想去除 ASCII 空格和控制字符,这里是您更新后的问题的一些代码:

unsigned char *in, *out;
for (out = in; *in; in++) if (*in > 32) *out++ = *in;
*out = 0;

关于c++ - 修整 UTF8 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6105115/

相关文章:

c - 升序和降序

c - 格雷码到二进制的转换

C编程: Redefine a macro defined in the shared library(.等)

c++ - 如何添加易于在需要时打开和关闭而不产生生产开销的日志?

c++ - 在给定的输出中找到最大值

c++ - 为什么我无法通过 lambda 捕获 "this"指针?

c - 在同一个 C 程序中同时使用 putchar 和 printf ?

html - 如何使用 cgi 返回到相同的 html 页面?

c++ - 使用 'using' 关键字获取指向类方法的指针

c++ - 字符串作为 C++ while 循环中的哨兵