📅  最后修改于: 2023-12-03 15:37:18.571000             🧑  作者: Mango
在 C++ 中,拆分字符串是一个常见的需求,可以通过一些简单的方法实现。
使用 std::stringstream
类可以很方便地将一个字符串拆分成多个子字符串。代码实现如下:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
std::vector<std::string> split(const std::string& s, char delim) {
std::vector<std::string> result;
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
result.push_back(item);
}
return result;
}
int main() {
std::string s = "hello,world";
std::vector<std::string> v = split(s, ',');
for (const std::string& item : v) {
std::cout << item << std::endl;
}
return 0;
}
以上代码中,我们定义了一个 split
函数,该函数输入一个字符串 s
和一个分隔符 delim
,并返回一个 std::vector<std::string>
类型的数组,其中每个元素是输入字符串中的一个子字符串。主函数中,我们将字符串 "hello,world" 按照逗号分隔后输出。
C++ 中的 std::string
类型提供了一些方便拆分字符串的成员函数,如 find
和 substr
。代码实现如下:
#include <iostream>
#include <string>
#include <vector>
std::vector<std::string> split(const std::string& s, char delim) {
std::vector<std::string> result;
std::string::size_type pos = 0, last_pos = 0;
while ((pos = s.find(delim, last_pos)) != std::string::npos) {
result.push_back(s.substr(last_pos, pos - last_pos));
last_pos = pos + 1;
}
result.push_back(s.substr(last_pos));
return result;
}
int main() {
std::string s = "hello,world";
std::vector<std::string> v = split(s, ',');
for (const std::string& item : v) {
std::cout << item << std::endl;
}
return 0;
}
在以上代码中,我们同样定义了一个 split
函数,并使用 find
函数查找字符串中的分隔符位置,使用 substr
函数获取子字符串。注意在最后需要将剩余的字符串作为最后一个子字符串加入数组中。
以上两种方法都可以很好地实现字符串拆分功能。在实际开发中,可以根据场景选择不同的实现方式,对于小规模的字符串拆分,可以考虑使用 std::string 的成员函数;若是大规模的字符串拆分,使用 std::stringstream 类应该更为高效。