gpt4 book ai didi

c++ - 字符编码独立字符交换

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:07 24 4
gpt4 key购买 nike

当我想反转字符串时,我喜欢使用这段代码。 [当我不使用 std::string 时或 C 中的其他内置函数] 。作为初学者,当我最初想到这个时,我有 ASCII表记。我认为这可以很好地与 Unicode 配合使用也。我假设因为值的差异(ASCII 等)是固定的,所以它有效。

是否存在此代码可能无法工作的任何字符编码?

char a[11],t;
int len,i;
strcpy(a,"Particl");
printf("%s\n",a);
len = strlen(a);
for(i=0;i<(len/2);i++)
{
a[i] += a[len-1-i];
a[len-1-i] = a[i] - a[len-1-i];
a[i] -= a[len-1-i];
}
printf("%s\n",a);

更新:

link与这个问题有关。

最佳答案

这不适用于某些(不一定是所有)代码点需要多个 char 单元来表示的任何编码,因为您是逐字节反转而不是逐个代码点-代码点。对于通常的 8 位 char,这包括可以表示所有 Unicode 的所有编码。

例如:在 UTF-16BE 中,字符串“hello”映射到字节序列 00 68 00 65 00 6c 00 6c 00 6f。应用于此字节序列的算法将生成序列 6f 00 6c 00 6c 00 65 00 68 00,它是字符串“漀氀氀栀”的 UTF-16BE 编码。

情况变得更糟——对 Unicode 字符串进行逐个代码点的反转仍然不会在所有情况下都产生正确的结果,因为 Unicode 有许多代码点作用于周围环境,而不是作为字符单独存在。举一个简单的例子,对包含 U+0308 COMBINING DIAERESIS 的字符串“Spın̈al Tap”进行代码点反转,将生成“paT länıpS”——看看分音是如何从 N 迁移到 A 的?在包含双向覆盖或连接 jamo 的字符串上逐个代码点反转的后果将更加可怕。

关于c++ - 字符编码独立字符交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16547194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com