场景

有一字符串, 字符串中, 包含中文, 英文, 数字, 标点等. 要求以每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. 知道怎么判断中文字符, 你可以做很多事情, 例如:统计字数; 显示中文时正确换行等.

分割含有中英文的字符串相关推荐

  1. php俩个字符串合并,php分割合并两个字符串的函数实例

    本文实例讲述了php分割合并两个字符串的函数..具体实现方法如下: 这里实现把两个字符串进行分割合并,例如str1=aaaa,str2=bbbb,合并后生成abababab /** * Merges ...

  2. SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串

    自定义取出第几个分割字符前的字符串,默认位置(0) 格式:dbo.split(字段名,'分隔字符',取出的第几个字符串) 如果没有分隔的字符,则返回整个字符串. 如果取出的位置字符串的位置超出Inde ...

  3. 获取分割后右边的字符串

    在数据库实现字符串分割,然后获取分割后右边的字符串,如: 实现这个功能,主要是从右边开始去获取分割的字符的位置来进行切割: CREATE FUNCTION [dbo].[svf_GetSplitRig ...

  4. C#实现 获取指定字节长度 中英文混合字符串 的方法

    平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错.尤其是插入中英文混合字符串时,SQL Server中一般中文要占 ...

  5. php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例

    本文实例讲述了PHP针对中英文混合字符串长度判断及截取方法.分享给大家供大家参考,具体如下: /** * * 中英混合字符串长度判断 * @param unknown_type $str * @par ...

  6. 中英文混合字符串长度的获取

    在项目中要处理中英文混合字符串的长度,中文按2个字符算,英文按1个字符算.以下是我处理的方法,不知道有没有更好的方法. private int GetGBLength(string strData) ...

  7. ThinkPHP5 ajax传值到后台进行处理(验证是否含有某段字符串、截取字符串、字符串转数组)...

    js中ajax请求,根据后台返回的数据做出不同的判断: function zhuanhuan() {$.ajax({url:"mc_url",data:{url:$("# ...

  8. Javascript中得到中英文混合字符串的长度

    有同事在公司的OA上发了个贴子,介绍在javascript中如何得到中英文混合字符串的长度. 用的是正则表达式. var str = "坦克是tank的音译";var len = ...

  9. python pandas 分割DataFrame中的字符串及元组

    python pandas 分割DataFrame中的字符串类型数据的方法 文章目录 1.使用str.split()方法 2.使用join()与split()方法结合 3. 使用apply方法分割元组 ...

最新文章

  1. 如何处理JSON中的特殊字符 介绍几种解决方案
  2. UA MATH574M 统计学习I 监督学习理论下
  3. 轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)
  4. service注入为null_如何解决quartz调度时候,job中的service为null的问题?
  5. 机器学习笔记(十)——Logistic Function AND Softmax Function
  6. 如何在PD17虚拟机上安装CentOS Linux系统
  7. 用OFFICE 2007发送的文章
  8. python 闭包的作用_python中对闭包的理解
  9. Oracle PL/SQL游标的学习
  10. 如何下载matlab,如何下载MATLAB?
  11. 高项计算题2-三点估算(计划评审技术PERT),时差,投资回收期,贴现率,沟通渠道
  12. matlab 直流-直流变换器毕业论文,基于MATLAB直流-直流变换器的研究毕业论文.docx-资源下载在线文库www.lddoc.cn...
  13. 田忌赛马博弈矩阵分析
  14. 树莓派HDMI转VGA线有无源
  15. 红色警戒2修改器原理百科(六)
  16. 使用Excel创建线性回归模型
  17. (最优化理论与方法)第一章最优化简介-第一节:最优化问题概括
  18. 【健身】程序员也应该知道的胸背体态矫正锻炼技巧(上)
  19. python的答辩问题及答案_计算机毕设答辩时都会问到哪些问题?
  20. android延迟刷新adapter,Android关于Adapter更新数据问题案例

热门文章

  1. Python迭代器、生成器、可迭代对象
  2. 数据全生命周期加密,三未信安参展2018贵阳数博会
  3. C语言数字游戏(室友打断腿版)
  4. 金蝶 k3 打开帐套时提示 中间层配置有误 .
  5. 小米手环3nfc和4nfc哪个好_吐槽真相解密小米手环3和nfc版区别是?哪个好?优缺点测评爆料...
  6. 塑壳断路器选型需关注的5个重要参数
  7. 字节跳动-教育职位-高级后端开发面试
  8. 来自于电报群对David Cao的在线访谈 !
  9. matlab出图底色透明
  10. 网络游戏需要多大的带宽,延迟又是怎么回事