关于截取带有中文字符字符串问题

 最近在做东西时候碰到了一个问题,当字符串中有中文,要截取固定长度的字符串,不能截取半截的字符串,在百度上也看了看,没有用c和c++实现的,几乎都是java,直接转一下类型就行了,但是这不是我想要的,我想要自己实现。
 前提:带有中文和英文的一个字符串,截取10个汉字字符长度的字符串;
 先分析一下,中文字符和英文字符站的位数不一样,(Unicode编码字符集是中文占2位,而UTF-8占3个字节,这里使用Unicode占2个字节做示范)中文是占2字节,英文占1字节,截取10个汉字就是截取20个字符的一个string,这里要考虑的就是最后一个汉字,如果最后一个汉字占string[19],string[20]的位置,超出的截取范围,就舍掉最后一个汉字,如果汉字是在string[18],string[19]的位置上,那么正好是一个完整的汉字,那么怎么判断最后一个汉字完不完整是一个主要的问题,下面是我的解决方案,可以提供参考:

#include<iostream>
#include<string>
using namespace std;
#define MAX_CHAR_LENGH (20)
int main()
{   string  str="123451234512345一二三";string Intercept;int CharCount = 0;for (int i = 0; i < str.size(); i++) {if (CharCount <= MAX_CHAR_LENGH) {if (str[i] & 0x80) {CharCount += 2;         if (CharCount > MAX_CHAR_LENGH ) {//对下一个中文是否超出截取范围做判断,超出即不能继续拼接字符串break;}Intercept += str[i];Intercept += str[++i];} else {CharCount += 1;Intercept += str[i];}}
}

 在判断是不是中文的时候可以通过string[i]&0x80来作判断如果为真,就证明是中文字符,如果为假证明是非中文只占一个字节。
 想测试我的程序,需要注意编码集,不能是UTF-8,如果是UTF-8,需要改动CharCount += 2为CharCount += 3,并且多加一行Intercept += str[++i],如下:

        Intercept += str[i];Intercept += str[++i];Intercept += str[++i];

c++中string截取带有中文字符串的解决方案相关推荐

  1. mysql 中文截取_中文字符串截取

    java多字节字符串按字节截取 算法思路 1.先按照实际要截取的字节长度,复制一份字节数组 2.转换回字符串,计算字符长度resLen,并按这个长度截取原字符串 3.计算截取的字符串的字节数是否等于需 ...

  2. mysql substr 中文字符_解析使用substr截取UTF-8中文字符串出现乱码的问题

    我们知道有时候使用substr来截取UTF-8中文字符串的时候,经常会出现乱码,为什么会出现这样的问题呢,本文告诉你答案. 看这样一段代码吧(字符编码为UTF-8): $str = '都知道strle ...

  3. Java字符串替换所有指定字符_C++中string替换所有指定字符串的方法

    C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所 ...

  4. linux中使用matplotlib缺失中文字体的解决方案

    linux中使用matplotlib缺失中文字体的解决方案 在linux中调用matplotlib画图时,如果label中有中文,需要通过以下语句指定字体: import matplotlib.pyp ...

  5. Java 分割字符串---按字节长度分割带有中文字符串

    中文在不同编码中占用的字节数是不同的,GBK编码中,一个汉字占两个字节,UTF-8编码格式中,一个汉字占3个字节. public static List<String> chineseSp ...

  6. python中string什么意思_python字符串(string)方法整理

    C C语言开发 python字符串(string)方法整理 python中字符串对象提供了很多方法来操作字符串,功能相当丰富. print(dir(str)) [..........'capitali ...

  7. mysql 中文字符查询不出数据_jsp页面显示不出mysql中查询出的中文字符串,插入中文也不好使...

    用Eclipse编写的jsp页面,连接的是mysql数据库.英文和数字都能正常显示,中文就显示不了. 用户注册... 用Eclipse编写的jsp页面,连接的是mysql数据库.英文和数字都能正常显示 ...

  8. java中String值为空字符串与null的判断方法

    Java空字符串与null的区别 1.类型        null表示的是一个对象的值,而不是一个字符串.例如声明一个对象的引用,String a=null.        ""表 ...

  9. java处理中文字符串_Java实现读取文章中重复出现的中文字符串

    在上个星期阿里巴巴一面的时候,最后面试官问我如何把一篇文章中重复出现的词或者句子找出来,当时太紧张,答的不是很好.今天有时间再来亲手实现一遍.其实说白了也就是字符串的处理,所以难度并不是很大. 以下是 ...

最新文章

  1. python编程入门书籍推荐-给刚入门python的朋友推荐几本书
  2. TypeScript之Https通信
  3. 从PC中向Android模拟器中复制文件
  4. html %3c 不给转义,八个无法利用XSS漏洞的场景
  5. jetty eclipse_3个步骤实现Jetty和Eclipse集成
  6. 360浏览器如何进行皮肤更换
  7. ubuntu安装zookeeper和kafka
  8. python3环境变量和pip_Tool_linux环境安装python3和pip
  9. 明明是数字“1000”转换成整形时却报错---BOM 非法字符 /65279(FEFF) big endian(FEFF)和little endian(FFFE) 模式
  10. 剑指offer——面试题8:旋转数组的最小数字
  11. 数据分析 超市条码_深圳超市通道摆闸常见故障解决|指示灯|摆闸|通道|限位
  12. 1002:方便记忆的电话号码
  13. linux rescue救援模式,Linux_linux中使用rescue救援模式,很多人都不知道Linux有一个救 - phpStudy...
  14. 景观平面图转鸟瞰图_快题干货| 速码!鸟瞰图、效果图、扩初图…5大辅助小图考试技巧全面大放送!...
  15. 谈谈我是怎么学会python的
  16. 前端框架是什么意思?
  17. 关于Angular Js动态表格合并单元格的一点见解
  18. 解密MySQL 8.0 multi-valued indexes
  19. 基于SRGAN的图像超分辨率处理
  20. JMX : MXBean

热门文章

  1. 全国大学生软件设计大奖成IT天才摇篮
  2. 无悔造车!贾跃亭与合伙人再次出手亿美元“增持”FF,FF 91量产不远了
  3. 服务器角色怎么修改密码,公主连接b服怎么改密码
  4. link[rel=“icon“]
  5. 【计算机动画】实验 路径曲线与运动物体控制/FFD/关键帧动画
  6. [算法100天 day9]递归无尽搜和记忆搜索,动态规划Ⅲ
  7. 自学两个月Python可以开始赚钱吗?
  8. Python 读文件
  9. python 遍历列表,并且将元素拼接的技巧
  10. Vue生命周期函数(钩子函数)