【200分】C/C++分割UTF8编码字符串函数
比如输入参数UTF8的字符串:iStr=“字符串string”要求输出字符串数组:[字][符][串][string]关键是如何把汉字按字分开一次最多只能选100分,后面再...
比如输入参数UTF8的字符串:iStr = “字符串string”
要求输出 字符串数组: [字][符][串][string]
关键是如何把汉字按字分开
一次最多只能选100分,后面再加!!!
UTF的长度不仅仅是1和2,加上阿拉伯的一些文字,全世界的文字UTF编码的长度应该是1到6,用第一位是否都可以判断?
★因为UTF8字符串中不一定是汉字,也有可能是其他国家的文字,所以长度不一定是1和2,还有3,4,5,6都有可能。刚刚测试了日文和韩文,同样的方法可以解析出正确的结果。谢拉。“接收的是最后的字符串”这个不是很明白,能否说明一下?
不好意思,节贴的话就不能回复了,恢复完这个马上给分 展开
要求输出 字符串数组: [字][符][串][string]
关键是如何把汉字按字分开
一次最多只能选100分,后面再加!!!
UTF的长度不仅仅是1和2,加上阿拉伯的一些文字,全世界的文字UTF编码的长度应该是1到6,用第一位是否都可以判断?
★因为UTF8字符串中不一定是汉字,也有可能是其他国家的文字,所以长度不一定是1和2,还有3,4,5,6都有可能。刚刚测试了日文和韩文,同样的方法可以解析出正确的结果。谢拉。“接收的是最后的字符串”这个不是很明白,能否说明一下?
不好意思,节贴的话就不能回复了,恢复完这个马上给分 展开
展开全部
再补:
我的意思是.我接收的东西是"s字tr符ing串"这样的字符串呢?
抑或不是字符串,而是原始的UTF8字节流?
如果是前者,是两个字节.如果是后者......就麻烦了,还得转换.原始的UTF8字节流确实是1~6的长度的,要按照格式和规则转换.
补:
接收的是最后的字符串还是直接的UTF8字节流?
如果是转了后的字符串,应该只占两位的.
汉字都占两个字符,而且在二进制表示中,最前一位都是1
也就是1xxxxxxx
程序中值为负
就可以这样处理:遇到正的直接输出一个字符,否则连续输出两个字符
如下
#include "stdio.h"
#include "string.h"
int main(){
char str[]="s字tr符ing串";
int i;
int l=strlen(str);
for(i=0;i<l;++i){
if(str[i]>=0){
printf("%c\n",str[i]);
}
else{
printf("%c%c\n",str[i],str[i+1]);
++i;
}
}
}
我的意思是.我接收的东西是"s字tr符ing串"这样的字符串呢?
抑或不是字符串,而是原始的UTF8字节流?
如果是前者,是两个字节.如果是后者......就麻烦了,还得转换.原始的UTF8字节流确实是1~6的长度的,要按照格式和规则转换.
补:
接收的是最后的字符串还是直接的UTF8字节流?
如果是转了后的字符串,应该只占两位的.
汉字都占两个字符,而且在二进制表示中,最前一位都是1
也就是1xxxxxxx
程序中值为负
就可以这样处理:遇到正的直接输出一个字符,否则连续输出两个字符
如下
#include "stdio.h"
#include "string.h"
int main(){
char str[]="s字tr符ing串";
int i;
int l=strlen(str);
for(i=0;i<l;++i){
if(str[i]>=0){
printf("%c\n",str[i]);
}
else{
printf("%c%c\n",str[i],str[i+1]);
++i;
}
}
}
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N (100000)
int display(char *ch,int n)
{
int len = n,i;
int flg =0;
if(strlen(ch)<n)
return -1;
for(i=0; i<len-1; i++){
if(ch[i]>0){
flg = 0;
}
else{
flg++;
}
printf("%c",ch[i]);
}
if(ch[len-1] <0){
if(flg%2 > 0)
{
printf("%c",ch[len-1]);
return len-1;
}
}
return len;
}
void main()
{
char ch[] = "中国人abc";
int i;
display(ch,5);
}
#include <string.h>
#include <stdlib.h>
#define N (100000)
int display(char *ch,int n)
{
int len = n,i;
int flg =0;
if(strlen(ch)<n)
return -1;
for(i=0; i<len-1; i++){
if(ch[i]>0){
flg = 0;
}
else{
flg++;
}
printf("%c",ch[i]);
}
if(ch[len-1] <0){
if(flg%2 > 0)
{
printf("%c",ch[len-1]);
return len-1;
}
}
return len;
}
void main()
{
char ch[] = "中国人abc";
int i;
display(ch,5);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
取istr的前六个字节,就是“字符串”。汉字都是两个字节划分的。
UTF8 需要转化成gb2312的话要MultiByteToWideChar()函数
UTF8 需要转化成gb2312的话要MultiByteToWideChar()函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是什么啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好难啊。.
我念完初中就不念了.
我念完初中就不念了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询