在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

c++截取英文和汉字(单双字节)混合字符串的更多相关文章

  1. String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰

    /// <summary> /// 按单字节字符串向左填充长度 /// </summary> /// <param name="input">& ...

  2. json包含单双引号问题解决方案

    解决方案:在后台处理 JSONArray.fromObject(list).toString() 转自明明如月小角落: 效果DEMO: JsonQuotesUtil.js /** * 解决json传输 ...

  3. js判断输入的是单字节还是双字节

    计算机上每一个字符.数字.汉字.字母等,都对应着unicode编码,unicode编码小于255的为单字节,大于255.小于65535的为双子节或三字节 查看一个字符对应的unicode编码 var ...

  4. Delphi 判断特定字符是为单字节还是双字节

    判断特定字符是为单字节还是双字节 // mbSingleByte 单字节字符 //mbLeadByte 双字节字符首字节 //mbTrailByte 双字节字符尾字节 Edit1.Text:='010 ...

  5. 单字节编码&双字节编码

    单字节编码(WINDOWS-1252.ISO-8859-1.UTF-8) 双字节编码(UTF-16) Windows 记事本默认会将文件保存为单字节的 ANSI(ASCII).如果您选择 " ...

  6. 各种编码中汉字所占字节数;中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030

    vim settings set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,latin1set termencoding=utf-8se ...

  7. js字符串长度计算(一个汉字==两个字符)和字符串截取

    js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\ ...

  8. BOM的来源是不可能出现的字符,GB2312双字节高位都是1,Unicode理论的根本缺陷导致UTF8的诞生

    Unicode字符编码规范   http://www.aoxiang.org 2006-4-2 10:48:02Unicode是一种字符编码规范 . 先从ASCII说起.ASCII是用来表示英文字符的 ...

  9. python - 用户交互/数据类型/格式化输出/运算符/流程控制单双多分支

    python:用户交互: 等用户输入,做反应: username=input("username:")password=input("password:")pr ...

随机推荐

  1. 如何使用Math对象快速计算数组中的最大值或最小值

    Math 对象下包含 min() 和 max() 方法 用于确定一组数值中的最大值和最小值.这两个方法都可以接收任意多个数值参数. var max = Math.max(1,2,3,4,5,6); c ...

  2. LeetCode 374. Guess Number Higher or Lower

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  3. windows下CMake使用图文手册 Part 2

    例子2:有目录的项目 我现在有个文件夹ProjectDate,有如下文件结构 E:. │  CMakeLists.txt │ ├─include │      Date.h │ └─src       ...

  4. 关于Jquery中的$.each获取各种返回类型数据的使用方法

    var arr = [ "one", "two", "three", "four"]; $.each(arr, func ...

  5. Python-7 列表list

    #1 创建列表.向列表中添加元素 1) 列表名称.append(*) 2) 列表名称.extend([*,*,...]) 3) 列表名称.insert(位置,*) member = ['小甲鱼','小 ...

  6. qt之mapx组件编程c2248和c2512错误

    mapx组件利用qt工具dumpcpp到处头文件和.cpp文件后将其加入到新建的qt项目中即可. 不过本人遇到问题知道今天偶然的解决了.记下来,以免忘记. demo的项目结构如下: 然后在.pro文件 ...

  7. Access denied for user 'Administrator'@'localhost' (using password: YES)

    Access denied for user 'Administrator'@'localhost' (using password: YES) 配置文件中明明是用的root <entry ke ...

  8. ffmpeg relocation error

    在向imx6移植ffmpeg后,一般的编解码操作没有问题,但是当从摄像头录视频时, ffmpeg -f video4linux2 -s 640*480 -r 10 -i /dev/video0 tes ...

  9. 用:before :after 来写一些小特效

    提起:before :after首先想到的是 —— 用它来去浮动来我们来换个方式玩接下来展示三种用:before :after来实现的特效 希望能起到抛砖引玉的作用 <一>第一种就是常见的 ...

  10. (windows)mongoDB3X+Robomongo的安装与基础配置

    一开始安装的时候还觉得很简单真正装了时候发现网上的资料参差不齐再次整理一份安装方法 ---------------------------------------------------------- ...