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(); 
}
原文地址:https://www.cnblogs.com/zxdjy-blog/p/15191505.html