【C++】字符串切割
using namespace std
/**
*
* @param str src string
* @param v remain vector after split str
* @param delims split charactor
*/
static void split_v1(const string &str, vector<string> &v, const char delims = '/') {
v.clear()
int curr = 0
int last = 0
int str_size = str.length()
while (curr < str_size) {
if (str[curr] == delims) {
if (curr - last > 0) {
v.push_back(str.substr(last, curr - last))
}
/*记录curr的下一个位置, 跳过delims*/
last = curr + 1
}
++curr
}
if (curr - last > 0) {
v.push_back(str.substr(last, curr - last))
}
}
static void split_v2(const string &str, vector<string> &v, string delims = " \t\n\r") {
v.clear()
int curr = 0
int last = 0
int str_size = str.length()
while (curr < str_size) {
if (delims.find(str[curr]) != string::npos) {
if (curr - last > 0) {
v.push_back(str.substr(last, curr - last))
}
last = curr + 1
}
++curr
}
if (curr - last > 0) {
v.push_back(str.substr(last, curr - last))
}
}
int main(int argc, char *argv[]) {
string str = "smooth:0.1, white:0.5, eyeenlarge:0.5, facethin:0.5"
vector<string> v1
split_v1(str, v1, ', ')
//vector<string>::iterator it = v1.begin()
auto it = v1.begin()
for (
cout << *it << endl
}
cout << v1[0] + '.' + v1[1] << endl
cout << v1[0] + ",,,,,,,,,,," + v1[1] << endl
/*-----------------------------------------------------------------*/
vector<string> v2
split_v2(str, v2)
//vector<string>::iterator it2 = v2.begin()
auto it2 = v2.begin()
for (
cout << *it2 << endl
}
cout << v2[0] + " " + v2[1] << endl
return 0
}
smooth:0.1,
white:0.5,
eyeenlarge:0.5,
facethin:0.5
smooth:0.1,.white:0.5,
smooth:0.1,,,,,,,,,,,,white:0.5,
smooth:0.1,
white:0.5,
eyeenlarge:0.5,
facethin:0.5
smooth:0.1, white:0.5,
Process finished with exit code 0