1

假设我从 API 中获得了几百行文本作为字符串 (C++),并且在该数据中散布着德语变音符号,例如 ä 或 ö,需要将其替换为 ae 和 oe。我熟悉编码(嗯,我读过http://www.joelonsoftware.com/articles/Unicode.html)并且解决问题很简单(基本上,搜索字符串,删除 char 并添加另外 2 个反而)。

但是,我对 C++ 的了解还不够快,无法快速做到这一点。我刚刚偶然发现了 StringBuilder ( http://www.codeproject.com/Articles/647856/4350-Performance-Improvement-with-the-StringBuilde ),它大大提高了速度,但我很好奇是否有更好的或更聪明的方法来做到这一点?

4

2 回答 2

4

如果您必须在如此小范围内提高效率,请考虑分两个阶段进行替换:

  • 第一阶段计算替换后结果中的字符数。遍历字符串,并1为每个普通字符添加计数;对于 ä 或 ö 等字符,添加2.
  • 此时,您有足够的信息来为结果分配字符串。制作一个您在第一阶段计算的长度的字符串。
  • 第二阶段执行实际替换:再次遍历字符串,复制常规字符,并将变音符号替换为相应的对。
于 2013-09-08T11:40:05.367 回答
2

当它以 UTF-8 编码时,德语变音符号都是 unicode 中的两字节值,它们的替代品也是如此aeor oe。因此,当您使用 char[] 而不是字符串时,您不必重新分配任何内存,并且可以在迭代 char[] 时替换字节。

于 2013-09-08T11:45:21.067 回答