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且小于第二个参数!\n"); } for(int i=start; i<=end; i++) { tmp+=dump[i-1]; } return tmp; } else { printf("请输入字符串!\n"); 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] = '\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\n", (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(); }