C++基础系列【28】string的split
博主介绍:程序喵大人
- 35- 资深C/C++/Rust/Android/iOS客户端开发
- 10年大厂工作经验
- 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
- 《C++20高级编程》《C++23高级编程》等多本书籍著译者
- 更多原创精品文章,首发gzh,见文末
- 👇👇记得订阅专栏,以防走丢👇👇
😉C++基础系列专栏
😃C语言基础系列专栏
🤣C++大佬养成攻略专栏
🤓C++训练营
👉🏻个人网站
C++标准库没有为std::string
提供split
方法,至于为什么没有提供,我查了很多资料,网上也有很多说法,但是我依旧没找到比较满意的答案。
肯定不是因为难以实现就是了,大概率是因为加了<font style="background-color:rgb(255,245,235);">split</font>
会打破某种设计的哲学。
官方没有,但是还经常有这个需求(项目中,平时刷题,都会用到split
),那就只能自己实现一个。
这里贴一个我经常在用的一个split
的实现:
std::vector<std::string> stringSplit(const std::string& str, char delim) {
std::stringstream ss(str);
std::string item;
std::vector<std::string> elems;
while (std::getline(ss, item, delim)) {
if (!item.empty()) {
elems.push_back(item);
}
}
return elems;
}
还有种常见的方式是使用C语言的strtok
:
std::vector<std::string> stringSplit(const std::string& strIn, char delim) {
char* str = const_cast<char*>(strIn.c_str());
std::string s;
s.append(1, delim);
std::vector<std::string> elems;
char* splitted = strtok(str, s.c_str());
while (splitted != NULL) {
elems.push_back(std::string(splitted));
splitted = strtok(NULL, s.c_str());
}
return elems;
}
如果你想使用split
却不知道怎么实现,可以考虑从以上两种方式中挑一个,我更多的是用第一种。
码字不易,欢迎大家点赞,关注,评论,谢谢!
C++训练营
专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!