c++截取英文和汉字(单双字节)混合字符串

时间:2023-03-09 15:56:15
c++截取英文和汉字(单双字节)混合字符串

在C++里截取字符串可以使用CString.Mid(),可是这个函数只能按英文(单字节)来截取,

如果是汉字可能就要计算好字符个数,如果是汉字和英文混合,那就没辙了。

可是恰好我需要这样一个函数,于是就自己修改了一个。

#include <vector>
 int is_zh_ch(char p)
{ /*汉字的两个字节的最高为都为1,这里采用判断最高位的方法
将p字节进行移位运算,右移8位,这样,如果移位后是0,
则说明原来的字节最高位为0,不是1那么也就不是汉字的一个字节
*/
if(~(p >> ) == )
{
return ;//代表不是汉字
} return -;
} CString sub(CString str,int start,int count)
{ if(typeid(str)==typeid(CString) && str.GetLength()>)
{
int len=str.GetLength(); CString tmp=""; //先把str里的汉字和英文分开
vector<CString> dump;
int i=;
while(i<len)
{
if (is_zh_ch(str.GetAt(i))==)
{
dump.push_back(str.Mid(i,));
i=i+;
}
else
{
dump.push_back(str.Mid(i,));
i=i+;
}
}
int residue_length=dump.size()-(start+);
count=(count>&&count<residue_length)?count:residue_length; //count默认为从start到结束的长度
if(start<||start>start+count){
printf("start is wrong");
}
//直接从dump里取即可
for(i=start; i<start+count; i++)
{
tmp+=dump[i];
} return tmp;
}
else
{
printf("str is not string\n");
return ""; }
}

参考:http://www.cnblogs.com/xdao/archive/2013/04/11/3015490.html