如何不依赖Boost库,按指定字符组合分割字符串为string vector?
不用Boost库实现字符串按指定分隔符分割
没问题,咱们完全可以用C++标准库来实现这个需求,不需要依赖Boost这类外部库。下面给你两种实用的方案:
方法一:手动遍历分割(灵活可控)
这种方法能让你完全掌控分割逻辑,适合需要自定义规则的场景:
#include <vector> #include <string> std::vector<std::string> split_string(const std::string& str, char delimiter) { std::vector<std::string> result; std::string current_substr; for (char c : str) { if (c == delimiter) { // 遇到分隔符,将当前累积的子串加入结果 result.push_back(current_substr); current_substr.clear(); } else { current_substr += c; } } // 别忘了添加最后一段(字符串末尾无分隔符的情况) result.push_back(current_substr); return result; } // 使用示例 int main() { std::string myString = "This is \n a test. Let's go on. \n Yeah."; std::vector<std::string> myVector = split_string(myString, '\n'); // 此时myVector就是你想要的目标结果 return 0; }
这个函数会逐个字符遍历输入字符串,遇到指定的分隔符(这里是'\n')就把当前积累的子串存入vector,最后再把剩余的子串补充进去,完全匹配你的需求。
方法二:利用标准库的stringstream和getline
C++的<sstream>库提供的getline函数刚好能按指定字符分割字符串,代码更简洁:
#include <vector> #include <string> #include <sstream> std::vector<std::string> split_string(const std::string& str, char delimiter) { std::vector<std::string> result; std::stringstream ss(str); std::string substr; // getline会读取直到遇到delimiter,并且自动跳过delimiter本身 while (std::getline(ss, substr, delimiter)) { result.push_back(substr); } return result; } // 使用示例 int main() { std::string myString = "This is \n a test. Let's go on. \n Yeah."; std::vector<std::string> myVector = split_string(myString, '\n'); return 0; }
std::getline在这里会每次从stringstream中读取字符,直到碰到'\n',然后把读取到的内容(不包含'\n')存入substr再添加到vector里。循环结束后,就能得到你需要的结果。
两种方法都能完美实现你要的效果,对比Boost的实现,标准库方案更轻量,不需要额外依赖。
内容的提问来源于stack exchange,提问作者user3596335
相关产品推荐
相关产品推荐

