网站首页 > 基础教程 正文
字符串分割,工作中的使用频率也算比较高的,如,将某个字符串按指定字符或者字符串进行分割得到多个子串。
如,读取文件内容按\n或者\r\n进行分割等。
然而在C/C++的世界里这些都不是现成的东西,所以这里把我自己项目中用到的提取出来分享给大家。
【虽然可以收藏备用,但是作为C/C++程序员,原理不但要会、自己手写也会才是合格的C/C++程序员哦】
代码示例如下(直接拿去用):
#include <string>
#include <iostream>
#include <vector>
using namespace std;
/**
* @brief 字符串分割
*
* @param str 待分割的字符串
* @param pattern 分割的标记
* @return vector<string> 返回分割的结果
*/
vector<string> split(const string &str, const string &pattern) {
// 匹配的开始下标
string::size_type pos_si = 0;
// 匹配的结束下标
string::size_type pos_ei = 0;
// 存储所有匹配到的字符串信息
vector<string> vec;
// 开始匹配
string mStr;
while (true) {
pos_ei = str.find(pattern, pos_si);
// 查询不到
if (pos_ei == string::npos) {
break;
}
// 截取匹配的的内容
mStr = str.substr(pos_si, pos_ei - pos_si);
// 收集
vec.push_back(mStr);
// 移动到下一个目标位置
pos_si = pos_ei + pattern.size();
// 清空子匹配内容
mStr.clear();
}
// 没有全部截完毕
if (pos_si < str.size()) {
vec.push_back(str.substr(pos_si));
}
return vec;
}
// 测试
int main() {
// 输入"are you ok ?" 输出 ["are", "you", "ok", "?"]
vector vec1 = split("are you ok ?", " ");
for (const auto &v: vec1)
cout << v << endl;
// 输入"abc*##efg*##kkkk" 输出 ["abc", "efg", "kkkk)"]
vector vec2 = split("abc*##efg*##kkkk)", "*##");
for (const auto &v: vec2)
cout << v << endl;
return 0;
}
猜你喜欢
- 2024-11-11 C++经典算法问题:背包问题(迭代+递归算法)!含源码示例
- 2024-11-11 C++进阶教程:C#嵌套循环 c++嵌套循环break
- 2024-11-11 C++经典算法 穷举法 穷举算法的优点
- 2024-11-11 C++数据结构-- 递归 排序 c++使用递归函数实现全排列
- 2024-11-11 如何使用c++发送window消息通知 c++怎么发给别人
- 2024-11-11 C++ replace函数-C++字符串替换函数
- 2024-11-11 C++学习:循环练习题(一) c++循环结构例题解析
- 2024-11-11 C/C++最细循环解析 c++循环结构23道题
- 2024-11-11 网络编程——C++实现socket通信(TCP)
- 2024-11-11 C++ GESP 2023年6月真题 c++历年真题解析
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)