第一种:利用getline分割(只能按某个字符分割)
函数原型
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
参数解释
is
:输入流对象,例如std::cin
用于从标准输入(键盘)读取数据,也可以是文件输入流std::ifstream
等。str
:用于存储读取到的一行文本的std::string
对象。delim
:可选参数,指定行结束的分隔符,默认值是换行符'\n'
。
废话少说,直接上分割代码样例:
std::vector<std::string> splitString(const std::string& input,const char& delimiter) {
std::vector<std::string> tokens;
std::istringstream iss(input);
std::string token;
// 循环调用 getline 函数,按指定分隔符分割字符串
while (std::getline(iss, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}
第二种:利用find和substr分割
无废话,直接上代码:
std::vector<std::string> splitString(const std::string& input, const std::string& delimiter) {
std::vector<std::string> tokens;
size_t start = 0;
size_t end = input.find(delimiter);
while (end != std::string::npos) {
// 提取从 start 到 end 之间的子字符串
//substr(pos,len)返回从指定位置pos开始,长度为len的字串
tokens.push_back(input.substr(start, end - start));
// 更新 start 为分隔字符串结束的位置
start = end + delimiter.length();
// 查找下一个分隔字符串的位置(从位置start开始查找子串delimiter,返回第一次出现的位置)
end = input.find(delimiter, start);
}
// 添加最后一个分隔字符串之后的子字符串(sunstr(start)返回从位置start到末尾的子串)
tokens.push_back(input.substr(start));
return tokens;
}