• c++ 中常用类型转换


    1、string 字符串截取

    (1)、string类型

    用substr(pos, n)(注:pos代表位置, n代表截取几个)截取子串,若字符串全是英文,得到的结果与预期的一致。若字符串中含有中文,因一个英文字符串长度为1、中文的字符串长度为2(根据编码决定),运行结果则与预期的不一致。

    用以下函数进行转换即可达到预期效果

    //判断字符是否是中文
    int is_zh_ch(char p){
        if(~(p >> 8) == 0)
        {
            return 1;
        }
        return -1;
    }
    string sub(string str,int start,int end){  // start需从1开始
        if(typeid(str)==typeid(string) && str.length()>0){
            int len=str.length();
            string tmp="";
            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();
            if(start<0||start>end){
                printf("方法调用错误,第一个参数应该大于等于0且小于第二个参数!
    ");
            }
            for(int i=start; i<=end; i++)
            {
                tmp+=dump[i-1];
            }
            return tmp;
        }
        else
        {
            printf("请输入字符串!
    ");
            return "";
        }
    }

    (2)、wstring

    wstring类型直接用substr(pos, n)函数即可。

    std::wstring wstr111 = L"/2/测试/子测试/夫低";
    std::wstring wstr222 = wstr111.substr(0, 8);
    wcout.imbue(locale("chs"));
    wcout << wstr222.c_str() << endl;

    wstring输出可用wcout,输出前需要设置wcout.imbue(locale("chs"));

    c_str()(个人理解是c语言的string),生成一个const char*指针,指向以空字符终止的数组。 内容与原string串相同. 这是为了与c语言兼容。

    2、类型转化

    (1)、string类型转换为wstring

    std::wstring StringToWstring(const std::string str){
        unsigned len = str.size() * 2;
        setlocale(LC_CTYPE, "");     
        wchar_t *p = new wchar_t[len];
        mbstowcs(p,str.c_str(),len);
        std::wstring wstr(p);
        delete[] p;
        return wstr;
    }

    (2)、wstring转换为string

    std::string WstringToString(LPCWSTR pwszSrc)
    {
        std::string strTemp;
        int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
        if (nLen <= 0)
        {
            return strTemp;
        }
        char* pszDst = new char[nLen];
        pszDst[0] = '';
        WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
        pszDst[nLen - 1] = 0;
        strTemp = pszDst;
        delete[] pszDst;
        return strTemp;
    }

    (3)、int转换为string

    string int2string(int data){
        ostringstream stream;
        stream<<data;  //n为int类型
        return stream.str();
    }

    (4)、时间戳转换为日期

    string time2Date(__int64 time){
        time_t t;
        struct tm *p;
        unsigned int time1 = time / 1000000;  // 将16位(微秒)时间戳转换为10位时间戳(秒)
        t=time_t(time1);
        p=gmtime(&t);
        char s[80];
        strftime(s, 80, "%Y-%m-%d %H:%M:%S", p);
        printf("%d: %s
    ", (int)t, s);
        return s;
    }

    3、字符串分割

    string strSplit(string str,string separator){
        vector<string> result;
        int cutAt;  
        while((cutAt = str.find_first_of(separator))!=str.npos){  
            if(cutAt>0){  
                result.push_back(str.substr(0,cutAt));
            }  
            str=str.substr(cutAt+1);  
        }  
        if(str.length()>0){  
            result.push_back(str);  
        }  
        return result.back(); 
    }
  • 相关阅读:
    使用 Terraform 在阿里云上快速部署 MQTT 集群
    Neuron Newsletter 202206|新增 1 个南向驱动、开源前端代码
    EMQX Cloud 更新:日志分析增加更多参数,监控运维更省心
    os:systemctl文档(四)systemd.unit
    教育:中国孩子缺失的教育
    os:apt sources.list文件说明
    asm:80x86寄存器详解(转载)
    asm:gdb资源集合(linux)
    asm: gdb 文档(gdb调试工具)
    书法:书法的理解
  • 原文地址:https://www.cnblogs.com/zxdjy-blog/p/15191505.html
Copyright © 2020-2023  润新知