我有一个包含 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/