gpt4 book ai didi

c++ - 在C++中很难使用北欧字符处理字符串

转载 作者:行者123 更新时间:2023-12-02 10:28:50 26 4
gpt4 key购买 nike

我已经尝试了多种方法来解决此问题。我只想分割一个字符串或为每个字符做一些事情。字符串中一旦包含北欧字符,就无法分割该字符串。
如果我们查看内存使用情况,length()函数将返回正确的答案,但这与字符串长度不同。 "ABCÆØÅ"的长度不为6,长度为9。每个特殊字符加一个。
任何人都有很好的答案??
此处的测试显示了问题,一些字母和许多?标记。 :-(

int main()
{
string name = "some æøå string";
for_each(name.begin(), name.end(), [] (char c) {
cout << c;
cout << endl;

});
}

最佳答案

如果您的终端支持utf-8编码,将std::cout与输入的字符串一起使用应该没问题,但是,您需要告诉编译器您输入了utf8字符串,如下所示:

int main()
{
string name = u8"some æøå string";
for_each(name.begin(), name.end(), [] (char c) {
cout << c;
cout << endl;

});
cout<<name; //this will also work
return 0; //add this just to be tidy
}
您需要这样做,因为UTF-8中的字符可能需要1、2、3或4个字节,具体取决于其外观。
然后根据需要执行的操作(例如,在字符之间进行拆分),应创建一个函数来检测每个utf8字符多长时间。然后,为每个utf8字符创建一个“字符串”,并从原始字符串中提取所需数量的字符。
有一个非常好的库(非常紧凑)utf8proc,可以让您执行这些操作。
utf8proc在许多项目中帮助我解决了此类问题。

关于c++ - 在C++中很难使用北欧字符处理字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63140172/

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