首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将(ICU4C) Unicode字符串逐个字符复制到另一个Unicode字符串中?

如何将(ICU4C) Unicode字符串逐个字符复制到另一个Unicode字符串中?
EN

Stack Overflow用户
提问于 2017-11-14 00:47:57
回答 1查看 376关注 0票数 1

我试图使用ICU的StringCharacterIterator将(可能的话)字符从源字符串复制到目标字符串。然而,我有意想不到的结果,我不知道为什么。

我希望这个程序的最后一行输出是dog,但是我得到了og∩┐┐

代码语言:javascript
复制
#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;
}

程序输出

代码语言:javascript
复制
111
103
65535
og￿

Unicode表

111 -拉丁文小写字母o

103 -拉丁文小写字母g

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 01:18:48

你有两个问题:

  1. 只有当迭代器超出字符串末尾时,StringCharacterIterator::hasNext才返回false。
  2. StringCharacterIterator::next32提高迭代器的当前位置并返回新的代码点。它类似于用于原始指针或标准库样式迭代器的*(++it)

综合起来,这意味着您将跳过字符串的第一个字符,并在结束后读取一个额外的字符。

您可以使用next32PostInc,它的行为类似于原始指针或标准库迭代器的*(it++),而不是next32

代码语言:javascript
复制
while(chars.hasNext())
    copy.append(chars.next32PostInc());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47275917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档