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
c++截取英文和汉字(单双字节)混合字符串的更多相关文章
- String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰
/// <summary> /// 按单字节字符串向左填充长度 /// </summary> /// <param name="input">& ...
- json包含单双引号问题解决方案
解决方案:在后台处理 JSONArray.fromObject(list).toString() 转自明明如月小角落: 效果DEMO: JsonQuotesUtil.js /** * 解决json传输 ...
- js判断输入的是单字节还是双字节
计算机上每一个字符.数字.汉字.字母等,都对应着unicode编码,unicode编码小于255的为单字节,大于255.小于65535的为双子节或三字节 查看一个字符对应的unicode编码 var ...
- Delphi 判断特定字符是为单字节还是双字节
判断特定字符是为单字节还是双字节 // mbSingleByte 单字节字符 //mbLeadByte 双字节字符首字节 //mbTrailByte 双字节字符尾字节 Edit1.Text:='010 ...
- 单字节编码&双字节编码
单字节编码(WINDOWS-1252.ISO-8859-1.UTF-8) 双字节编码(UTF-16) Windows 记事本默认会将文件保存为单字节的 ANSI(ASCII).如果您选择 " ...
- 各种编码中汉字所占字节数;中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
vim settings set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,latin1set termencoding=utf-8se ...
- js字符串长度计算(一个汉字==两个字符)和字符串截取
js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\ ...
- BOM的来源是不可能出现的字符,GB2312双字节高位都是1,Unicode理论的根本缺陷导致UTF8的诞生
Unicode字符编码规范 http://www.aoxiang.org 2006-4-2 10:48:02Unicode是一种字符编码规范 . 先从ASCII说起.ASCII是用来表示英文字符的 ...
- python - 用户交互/数据类型/格式化输出/运算符/流程控制单双多分支
python:用户交互: 等用户输入,做反应: username=input("username:")password=input("password:")pr ...
随机推荐
- java安全沙箱(二)之.class文件检验器
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...
- 培训第五天---JS
&&与||的基础<script type="text/javascript"> var c = 4||3; alert(c);</script&g ...
- C++ 实现Range类,用于常规遍历
PYTHON的Range类非常好用,所以用C++来简单实现下: // 实现Range类,用于遍历 // #include <string> class Range { public: / ...
- jQuery MiniUI开发系列之:使用API文档
jQuery MiniUI在组件设计上,是简约.独立的,没有复杂的继承体系. 比如使用DataGrid,可以在api文档的datagrid部分,查找到datagrid的所有属性.方法.事件,而无需关注 ...
- Converter转换器使用
package com.xu.javabean; import java.lang.reflect.InvocationTargetException; import java.util.Date; ...
- nginx日志分割脚本
[root@localhost nginx]# cat logs/nginx.pid 5118[root@localhost nginx]# kill -QUIT 5118-QUIT : 关闭进程-H ...
- Xcode 8 在XIB中布局View尺寸1000*1000
Xcode 8 中XIB布局变动,在界面未展示之前,所有的View的布局都会给一个1000*1000的初始值,查看视图层级可以看到View拖得很长, 有时候我们在ViewDidLoad中布局的时候会使 ...
- python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...
- oracle DBlink 【转】
. 实现结果:在一个数据库中某个用户下编写一个存储过程,在存储过程中使用DBLINK连接另一个数据库,从此数据库中的一个用户下取数,然后插入当前的数据库中的一个表中. 二. 实现方法步骤: 1. 创建 ...