zoukankan      html  css  js  c++  java
  • c++截取汉字和英文混合字符串

    在C++里截取字符串可以使用string.substr(),可是这个函数只能按英文来截取,

    如果是汉字可能就要计算好字符个数,如果是汉字和英文混合,那就只能望洋兴叹了。

    可是恰好我需要这样一个函数,于是就自己实现了一个,其中如何判断汉字和英文

    参看了此处

    代码简单也无优化,若有更好的方法欢迎提出,代码如下。

    #include <iostream>
    #include <string>
    #include<cstdio>
    #include<vector>
    #include<typeinfo>
    using namespace std;
    
    int is_zh_ch(char p)
    {
    
        /*汉字的两个字节的最高为都为1,这里采用判断最高位的方法
        将p字节进行移位运算,右移8位,这样,如果移位后是0,
        则说明原来的字节最高位为0,不是1那么也就不是汉字的一个字节
        */
        if(~(p >> 8) == 0)
        {
            return 1;//代表不是汉字
        }
    
        return -1;
    }
    
    
    
    string sub(string str,int start,int end=-1)
    {
    
        if(typeid(str)==typeid(string) && str.length()>0)
        {
            int len=str.length();
    
            string tmp="";
    
            //先把str里的汉字和英文分开
            vector <string> dump;
            int i=0;
            while(i<len)
            {
                if (is_zh_ch(str.at(i))==1)
                {
                    dump.push_back(str.substr(i,2));
                    i=i+2;
    
                }
                else
                {
                    dump.push_back(str.substr(i,1));
                    i=i+1;
                }
            }
    
    
            end=end>0?end:dump.size(); //end默认为dump.size
            if(start<0||start>end)
                printf("start is wrong");
         //直接从dump里取即可
    for(i=start; i<=end; i++) { tmp+=dump[i-1]; } return tmp; } else { printf("str is not string\n"); return ""; } } int main() { string p="半山wuji"; cout<<sub(p,1,1)<<endl; cout<<sub(p,2,2)<<endl; cout<<sub(p,3); }

    输出如下:



    wuji

    符合我的要求。


    作者:半山
    出处:http://www.cnblogs.com/xdao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    java NIO 总结
    NIO 服务器和客户端 demo
    nio channel demo
    使用docker制作zookeeper镜像
    java BIO模型demo
    IDEA中语句添加try....catch..语句块
    线程的几种创建方式
    海豚调度Dolphinscheduler源码分析(四)
    @PostConstruct注解
    zookeeper常用命令
  • 原文地址:https://www.cnblogs.com/xdao/p/cpp_substr.html
Copyright © 2011-2022 走看看