gpt4 book ai didi

C++子串多字节字符

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

我有这个 std::string,它包含一些跨越多个字节的字符。

当我在这个字符串上做一个子字符串时,输出是无效的,因为当然,这些字符被算作 2 个字符。在我看来,我应该改用 wstring,因为它将这些字符存储为一个元素而不是多个元素。

所以我决定将字符串复制到 wstring 中,但这当然没有意义,因为字符仍然拆分为 2 个字符。这只会让事情变得更糟。

是否有将字符串转换为 wstring 并将特殊字符合并为 1 个元素而不是 2 个元素的好的解决方案。

谢谢

最佳答案

更简单的版本。基于提供的解决方案Getting the actual length of a UTF-8 encoded std::string?作者:马塞​​洛·坎托斯

std::string substr(std::string originalString, int maxLength)
{
std::string resultString = originalString;

int len = 0;
int byteCount = 0;

const char* aStr = originalString.c_str();

while(*aStr)
{
if( (*aStr & 0xc0) != 0x80 )
len += 1;

if(len>maxLength)
{
resultString = resultString.substr(0, byteCount);
break;
}
byteCount++;
aStr++;
}

return resultString;
}

关于C++子串多字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846953/

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