当我对此字符串执行子字符串时,输出无效,因为当然,这些字符计为2个字符.在我看来,我应该使用wstring,因为它将这些字符存储为一个元素而不是更多.
所以我决定将字符串复制到wstring中,但是当然这没有意义,因为字符仍然分为2个字符.这只会让情况变得更糟.
将字符串转换为wstring有一个很好的解决方案,将特殊字符合并为1个元素而不是2个元素.
谢谢
解决方法 实际上只有两种可能的解决方案.如果你这样做了很多,在很远的距离,你最好转换你的
字符到单个元素编码,使用wchar_t(或int32_t,
或者什么是最合适的.这不是一个简单的副本
将每个char转换为目标类型,但是为true
转换函数,它将识别多字节字符,以及
将它们转换为单个元素.
对于偶尔使用或更短的序列,可以自己编写
用于提前n个字节的函数.对于UTF-8,我使用以下内容:
inline size_tsize( Byte ch ){ return byteCounttable[ ch ] ;}template< typename inputIterator >inputIteratorsucc( inputIterator begin,size_t size,std::random_access_iterator_tag ){ return begin + size ;}template< typename inputIterator >inputIteratorsucc( inputIterator begin,std::input_iterator_tag ){ while ( size != 0 ) { ++ begin ; -- size ; } return begin ;}template< typename inputIterator >inputIteratorsucc( inputIterator begin,inputIterator end ){ if ( begin != end ) { begin = succ( begin,end,size( *begin ),std::::iterator_traits< inputIterator >::iterator_category() ) ; } return begin ;}template< typename inputIterator >size_tcharacterCount( inputIterator begin,inputIterator end ){ size_t result = 0 ; while ( begin != end ) { ++ result ; begin = succ( begin,end ) ; } return result ;}总结
以上是内存溢出为你收集整理的C子串多字节字符全部内容,希望文章能够帮你解决C子串多字节字符所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)