QT String有split分割字符串函数,很好用。
非QT环境下,需要自己写一个split,今记录下,防走失。
环境:win10, VS2019, MSVC/14.29.30133
#include <string>
void split(const std::string& s, std::vector<std::string>& tokens, const std::string& delimiters = " ") {
std::string::size_type lastPos = s.find_first_not_of(delimiters, 0);
std::string::size_type pos = s.find_first_of(delimiters, lastPos);
while (std::string::npos != pos || std::string::npos != lastPos) {
tokens.push_back(s.substr(lastPos, pos - lastPos));
lastPos = s.find_first_not_of(delimiters, pos);
pos = s.find_first_of(delimiters, lastPos);
}
}
int main()
{
std::string test_dir = "D:/WorkStation/data/";
std::vector<std::string> tokens;
split(test_dir, tokens, "/");
return 0;
}
使用istringstream方法
#include<vector>
#include<sstream>
void Stringsplit(std::string str, const const char split, std::vector<std::string>& res)
{
std::istringstream iss(str); // 输入流
std::string token; // 接收缓冲区
while (std::getline(iss, token, split)) // 以split为分隔符
{
res.push_back(token);
}
}
int main(int, char** argv)
{
std::string xml_dir = "D:/WorkStation/outputs/";
std::vector< std::string > xml_files;
Stringsplit(xml_dir, '/', xml_files);
return 0;
}