求解 C++处理包含中文的字符串问题!

agustins agustins 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题描述
运行下面代码得到的结果:
周玥座位 length长度为: 5
中国人123 length长度为: 6
上海 length长度为: 2
北漂 length长度为: 2
一般的汉字都能识别,比如“上海”,识别的长度为2,但是“周玥座位” 得到长度为5,把“玥”识别成了2个长度了。目标是中文识别一个长度。针对于这种情况,请教大神怎么处理?

#include <cstring>
#include <iostream>
#include <string>

using namespace std;
int gbk_strlen(const char* str);

main()
{
string str[4] = {"周玥座位","中国人123","上海","北漂"};

for (int i = 0; i < sizeof(str); i++) {

char p[20];
strcpy(p,str[i].data());
int strLength=gbk_strlen(p);
cout<<str[i]+" length长度为: ";
cout<<strLength<<endl;
}
}

int gbk_strlen(const char* str)
{
const char* p = str; //p用于后面遍历

while(*p) //若是结束符0,则结束循环
{

if(*p < 0 && (*(p+1)<0 || *(p+1) < 63)) //中文汉字情况
{
str++; //str移动一位,p移动移动2位,因此长度加1
p += 2;
}
else
{
p++; //str不动,p移动一位,长度加1
}
}
return p-str; //返回地址之差
}
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
agustins
C++ 语言 65,214 成员 250,514 内容