目录
1. 数字型字符串
以逗号或者其他符号,分割数字型(同时支持int、double、float)字符串,并保存到vector数组中。
template <class T>
std::vector<T> str2vector(std::string str, const char * split_str= ".")
{
std::vector<T> result;
// string->char *
char *s_input = (char *)str.c_str();
char *p = strtok(s_input, split_str);
T a;
while (p != NULL)
{
// char * -> int
sscanf(p, "%d", &a);
//sscanf(p, "%X", &a); //16进制
result.push_back(a);
p = strtok(NULL, split_str);
}
return result;
}
使用:
std::string ng_num_th_list = "123,45"
std::vector<int> _th_list = str2vector<int>(ng_num_th_list.toStdString(), ",");
2. 分割数字型或者中英文字符串型的字符串
以逗号或者其他符号,分割数字型或者中英文字符串型的字符串
std::string UtfToGbk(std::string strValue)
{
int len = MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return std::string(str);
}
template <class T>
std::vector<T> str2vector(std::string str, const char split_str = '.')
{
str = UtfToGbk(str);
std::vector<T> result;
for (int i = 0; i < str.size(); i++)
if (str[i] == split_str)
str[i] = ' ';
std::istringstream out_str(str);
T cur_c;
while (out_str >> cur_c)
{
result.push_back(cur_c);
}
return result;
}
使用:
std::string name_list = "中国,深圳市"
std::vector<std::string> name_list = str2vector<std::string>(name_list.toStdString(), ',');
std::string area_list = "123,45"
std::vector<int> area_th_list = str2vector<int>(area_list .toStdString(), ',');