背景与动机
在实际开发中,字符串处理是最基础的需求之一。无论是日志分析还是网络协议解析,拆分文本都无处不在。
Python、Java 等高级语言都有内建的 split() 方法,但 C++ 标准库并没有直接可用的统一接口。这导致初学者在面试或工程中经常需要重复造轮子。
因此,手写一个通用、健壮的 split 函数,是掌握 C++ 字符串处理的重要里程碑。
核心场景
典型应用包括配置文件解析(key=value)、CSV 数据处理、命令行参数拆分等。通过实现它,可以综合训练 std::string 下标访问、STL 容器(vector)以及边界控制能力。
实现思路
我们需要支持两种模式:
- 单字符分隔符:遍历字符串,遇到分隔符即切割。
- 多字符分隔符:利用
find()查找位置,配合substr()截取。
设计原则是不修改原字符串,保持函数职责单一,并处理好首尾分隔符及连续分隔符的情况。
完整代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 单字符分隔符版本
vector<string> split(const string& str, char delimiter) {
vector<string> result;
string temp;
for (size_t i = 0; i < str.size(); ++i) {
if (str[i] == delimiter) {
result.push_back(temp);
temp.clear();
} else {
temp += str[i];
}
}
// 添加最后一个子串
result.push_back(temp);
return result;
}
// 字符串分隔符版本
vector<string> split( string& str, string& delimiter) {
vector<string> result;
(delimiter.()) result;
start = ;
pos = ;
((pos = str.(delimiter, start)) != string::npos) {
result.(str.(start, pos - start));
start = pos + delimiter.();
}
result.(str.(start));
result;
}
{
string s1 = ;
string s2 = ;
vector<string> r1 = (s1, );
vector<string> r2 = (s2, );
cout << << endl;
( & item : r1) cout << item << endl;
cout << endl << << endl;
( & item : r2) cout << item << endl;
;
}

