如何在C ++中有效地替换德语变音符号?

时间:2013-09-08 11:32:29

标签: c++ string

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

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

2 个答案:

答案 0 :(得分:4)

如果您必须在如此小的规模上提高效率,请考虑分两个阶段进行更换:

  • 第一阶段计算替换后结果中的字符数。浏览字符串,并将1添加到每个普通字符的计数中;对于ä或ö等字符,请添加2
  • 此时,您有足够的信息为结果分配字符串。制作一个在第一阶段计算的长度的字符串。
  • 第二阶段执行实际替换:再次遍历字符串,复制常规字符,并用相应的对替换已声明的字符。

答案 1 :(得分:2)

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