如何逐个字符地将(ICU4C)Unicode 字符串复制到另一个 Unicode 字符串?
How to copy a (ICU4C) Unicode string to another Unicode string character by character?
我正在尝试使用 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 table
111 - 拉丁文小写字母 o
103 - 拉丁文小写字母 g
你有两个问题:
StringCharacterIterator::hasNext
returns 仅当迭代器超出字符串末尾时才为 false。
StringCharacterIterator::next32
前进迭代器的当前位置,returns 前进新代码点。它类似于原始指针或标准库样式迭代器的 *(++it)
。
总而言之,这意味着您将跳过字符串的第一个字符并读取末尾以外的额外字符。
您可以使用 next32PostInc
,对于原始指针或标准库迭代器,它的行为类似于 *(it++)
,而不是 next32
:
while(chars.hasNext())
copy.append(chars.next32PostInc());
我正在尝试使用 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 table
111 - 拉丁文小写字母 o
103 - 拉丁文小写字母 g
你有两个问题:
StringCharacterIterator::hasNext
returns 仅当迭代器超出字符串末尾时才为 false。StringCharacterIterator::next32
前进迭代器的当前位置,returns 前进新代码点。它类似于原始指针或标准库样式迭代器的*(++it)
。
总而言之,这意味着您将跳过字符串的第一个字符并读取末尾以外的额外字符。
您可以使用 next32PostInc
,对于原始指针或标准库迭代器,它的行为类似于 *(it++)
,而不是 next32
:
while(chars.hasNext())
copy.append(chars.next32PostInc());