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

How to efficiently replace german umlauts in C++?

本文关键字:德语 音符 符号 有效地 替换 C++      更新时间:2023-10-16

>假设我从 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),它大大提高了速度,但我很好奇是否有更好或更聪明的方法可以做到这一点?

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

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

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