我试图使用ICU的StringCharacterIterator将(可能的话)字符从源字符串复制到目标字符串。然而,我有意想不到的结果,我不知道为什么。
我希望这个程序的最后一行输出是dog,但是我得到了og∩┐┐
#include <iostream>
#include <icu4c/unicode/schriter.h>
int main()
{
UnicodeString dog = UnicodeString::fromUTF8("dog");
StringCharacterIterator chars(dog);
UnicodeString copy;
while(chars.hasNext())
copy.append(chars.next32());
for(int i=0; i<copy.countChar32(); i++)
{
int32_t charNumber = copy.char32At(i);
std::cout << charNumber << "\n";
}
std::string stdString;
copy.toUTF8String(stdString);
std::cout << stdString;
}程序输出
111
103
65535
og∩┐┐Unicode表
111 -拉丁文小写字母o
103 -拉丁文小写字母g
发布于 2017-11-14 01:18:48
你有两个问题:
StringCharacterIterator::hasNext才返回false。StringCharacterIterator::next32提高迭代器的当前位置并返回新的代码点。它类似于用于原始指针或标准库样式迭代器的*(++it)。综合起来,这意味着您将跳过字符串的第一个字符,并在结束后读取一个额外的字符。
您可以使用next32PostInc,它的行为类似于原始指针或标准库迭代器的*(it++),而不是next32。
while(chars.hasNext())
copy.append(chars.next32PostInc());https://stackoverflow.com/questions/47275917
复制相似问题