gpt4 book ai didi

c++ - 如何忽略字符串中的重音以使其不改变其长度?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:05 25 4
gpt4 key购买 nike

我正在使用函数 length() 确定 C++ 中某些字符串的长度, 但注意到一些奇怪的事情:假设我在 main 中定义功能

string str;
str = "canción";

然后,当我计算 str 的长度时通过 str.length()我得到输出 8 .相反,如果我定义 str = "cancion"并计算str的长度,输出为 7 .换句话说,字母“o”上的重音改变了字符串的实际长度。其他口音也会发生同样的事情。例如,如果 str = "für"它会告诉我它的长度是4而不是 3 .

我想知道如何在确定字符串的长度时忽略这些重音字符;但是,我不想忽略像 ' 这样的孤立字符.例如,如果 str = livin' , 的长度 str必须是 6 .

最佳答案

这是一个很难的课题。您的字符串可能是 UTF-8 编码的,并且 str.length() 计算字节数。一个ASCII字符可以用1个字节编码,但编码大于127的字符用1个字节以上编码。

计算 unicode 代码点可能无法为您提供所需的答案。相反,您需要考虑代码点的宽度来处理分隔的重音符号和双倍宽度的代码点(也许还有其他情况)。因此,如果不使用库,很难正确地做到这一点。

您可能想查看 ICU .

如果你有一个受限的案例并且你不想为此使用一个库,你可能想要查看 UTF-8 encoding (这并不难),并创建一个简单的 UTF-8 代码点计数器(一个简单的算法可以是计算 (b&0xc0)!=0x80 的字节数)。

关于c++ - 如何忽略字符串中的重音以使其不改变其长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903342/

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