分割含有中英文的字符串
场景
有一字符串, 字符串中, 包含中文, 英文, 数字, 标点等. 要求以每3个字符为一组, 把这字符串分开. (不是Unicode编码)
说明
1. 如果这字符串只有数字和字母, 那很简单.
2. 如果这字符串只有中文, 那也很简单.
3. 但是这个字符串是中文, 英文等混合的.
4. 如果是Unicode编码也很简单, 但这使用多字节, 也就是中文占用2个字节, 其他字符占用1个字节.
实现方法一
#include <vector>
#include <string>bool BeChineseFirstCode(unsigned char chData)
{return (0xB0 <= chData) && (0xF7 >= chData); // 汉子第一个字节的范围
}bool BeChineseSecondCode(unsigned char chData)
{return (0xA1 <= chData) && (0xFE >= chData); // 汉子第二个字节的范围
}bool BeChinese(unsigned char* pWord)
{return BeChineseFirstCode(pWord[0]) && BeChineseSecondCode(pWord[1]);
}void SplitString(std::vector<std::string>& strVector, std::string& strData, int nCount)
{int nLen = strData.length();unsigned char* pData = (unsigned char*)strData.c_str();int i = 0;int nBegin = 0;int nEnd = 0;int nNum = 0;for(i = 0; i < nLen; ++i){if(BeChineseFirstCode(*(pData + i))){if(BeChineseSecondCode(*(pData + i + 1))){++i;++nNum;}}else{++nNum;}if(nNum == nCount){strVector.push_back(strData.substr(nBegin, i - nBegin + 1));nBegin = i + 1;nNum = 0;}}// 最后一截if(0 != nNum){strVector.push_back(strData.substr(nBegin, strData.length() - nBegin));}
}调用(看一下结果):std::vector<std::string> strVector;std::string strData = "中国人a你好d看的方d法d可说d的s说分手的方式1发)生e地~方";SplitString(strVector, strData, 3);
小结
1. 这里关键是怎么判断中文字符.
2. 知道怎么判断中文字符, 你可以做很多事情, 例如:统计字数; 显示中文时正确换行等.
分割含有中英文的字符串相关推荐
- php俩个字符串合并,php分割合并两个字符串的函数实例
本文实例讲述了php分割合并两个字符串的函数..具体实现方法如下: 这里实现把两个字符串进行分割合并,例如str1=aaaa,str2=bbbb,合并后生成abababab /** * Merges ...
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
自定义取出第几个分割字符前的字符串,默认位置(0) 格式:dbo.split(字段名,'分隔字符',取出的第几个字符串) 如果没有分隔的字符,则返回整个字符串. 如果取出的位置字符串的位置超出Inde ...
- 获取分割后右边的字符串
在数据库实现字符串分割,然后获取分割后右边的字符串,如: 实现这个功能,主要是从右边开始去获取分割的字符的位置来进行切割: CREATE FUNCTION [dbo].[svf_GetSplitRig ...
- C#实现 获取指定字节长度 中英文混合字符串 的方法
平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错.尤其是插入中英文混合字符串时,SQL Server中一般中文要占 ...
- php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例
本文实例讲述了PHP针对中英文混合字符串长度判断及截取方法.分享给大家供大家参考,具体如下: /** * * 中英混合字符串长度判断 * @param unknown_type $str * @par ...
- 中英文混合字符串长度的获取
在项目中要处理中英文混合字符串的长度,中文按2个字符算,英文按1个字符算.以下是我处理的方法,不知道有没有更好的方法. private int GetGBLength(string strData) ...
- ThinkPHP5 ajax传值到后台进行处理(验证是否含有某段字符串、截取字符串、字符串转数组)...
js中ajax请求,根据后台返回的数据做出不同的判断: function zhuanhuan() {$.ajax({url:"mc_url",data:{url:$("# ...
- Javascript中得到中英文混合字符串的长度
有同事在公司的OA上发了个贴子,介绍在javascript中如何得到中英文混合字符串的长度. 用的是正则表达式. var str = "坦克是tank的音译";var len = ...
- python pandas 分割DataFrame中的字符串及元组
python pandas 分割DataFrame中的字符串类型数据的方法 文章目录 1.使用str.split()方法 2.使用join()与split()方法结合 3. 使用apply方法分割元组 ...
最新文章
- 如何处理JSON中的特殊字符 介绍几种解决方案
- UA MATH574M 统计学习I 监督学习理论下
- 轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)
- service注入为null_如何解决quartz调度时候,job中的service为null的问题?
- 机器学习笔记(十)——Logistic Function AND Softmax Function
- 如何在PD17虚拟机上安装CentOS Linux系统
- 用OFFICE 2007发送的文章
- python 闭包的作用_python中对闭包的理解
- Oracle PL/SQL游标的学习
- 如何下载matlab,如何下载MATLAB?
- 高项计算题2-三点估算(计划评审技术PERT),时差,投资回收期,贴现率,沟通渠道
- matlab 直流-直流变换器毕业论文,基于MATLAB直流-直流变换器的研究毕业论文.docx-资源下载在线文库www.lddoc.cn...
- 田忌赛马博弈矩阵分析
- 树莓派HDMI转VGA线有无源
- 红色警戒2修改器原理百科(六)
- 使用Excel创建线性回归模型
- (最优化理论与方法)第一章最优化简介-第一节:最优化问题概括
- 【健身】程序员也应该知道的胸背体态矫正锻炼技巧(上)
- python的答辩问题及答案_计算机毕设答辩时都会问到哪些问题?
- android延迟刷新adapter,Android关于Adapter更新数据问题案例