求解 C++处理包含中文的字符串问题!
问题描述
运行下面代码得到的结果:
周玥座位 length长度为: 5
中国人123 length长度为: 6
上海 length长度为: 2
北漂 length长度为: 2
一般的汉字都能识别,比如“上海”,识别的长度为2,但是“周玥座位” 得到长度为5,把“玥”识别成了2个长度了。目标是中文识别一个长度。针对于这种情况,请教大神怎么处理?
运行下面代码得到的结果:
周玥座位 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; //返回地址之差
}
...全文
相关推荐
c++ 与c#的中文字符串传递演示demo
1.c++编译成dll。 2.c#调用非托管dll,演示中文字符串传递,以及回调的过程。 3.演示中文字符串传递,演示c#与c++的委托回调
05 QString字符串处理及中文乱码问题处理.zip
qt video,从基础开始,第5部分,一共14部分,使用vs2015的addin作为教学工具,很不错的。
C++如何过滤出字符串的中文(GBK、UTF-8)
前言 最近在处理游戏敏感词之类的东西,为了加强屏蔽处理,所以需要过滤掉字符串中的除汉字之外的是其他东西如数字,符号,英文字母等。 首先我查阅资料并写了个函数: 示例:返回输入字符串中汉字的个数: std::string StrWithOutSymbol(const std::string &source) { string sourceWithOutSymbol; int i = 0; while (source[i] != 0) { if (source[i] & 0x80 ) { sourceWithOutSymbol += source[i]; source
C++ 处理中文符号实例详解
主要介绍了C++ 处理中文符号实例详解的相关资料,需要的朋友可以参考下
解决c++调用python中文乱码问题
主要介绍了c++调用python中文乱码问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


