C++实现字符串切割的两种方法
在C++中,经常需要将字符串按照指定的分隔符进行切割,得到分割后的子字符串。本文将会介绍两种实现字符串切割的方法。
方法一:使用STL库中的stringstream
在C++中,STL库中的stringstream
类可以方便地将字符串转换为其他数据类型,同时也能够按照指定的分隔符对字符串进行切割。具体的实现方法如下:
#include <sstream>
#include <string>
#include <vector>
std::vector<std::string> split(const std::string& s, char delim) {
std::stringstream stream(s);
std::vector<std::string> result;
std::string token;
while (std::getline(stream, token, delim)) {
result.push_back(token);
}
return result;
}
split
函数接受两个参数,第一个参数s
是需要切割的字符串,第二个参数delim
是分隔符;stringstream
类的构造函数接受一个字符串参数,该参数是需要分割的字符串;- 在循环中,使用
std::getline
函数按照指定的分隔符对字符串进行切割,并将切割后的子字符串存储到容器中; - 最后返回存储所有子字符串的容器。
以下是一个示例代码:
#include <iostream>
#include <vector>
std::vector<std::string> split(const std::string& s, char delim) {
std::stringstream stream(s);
std::vector<std::string> result;
std::string token;
while (std::getline(stream, token, delim)) {
result.push_back(token);
}
return result;
}
int main() {
std::string s = "hello,world,how,are,you";
std::vector<std::string> result = split(s, ',');
for (const auto& token : result) {
std::cout << token << std::endl;
}
return 0;
}
以上代码输出结果为:
hello
world
how
are
you
方法二:使用C语言中的strtok函数
除了使用STL库中的stringstream
类之外,还可以使用C语言中的strtok
函数对字符串进行切割。具体实现方法如下:
#include <cstring>
#include <vector>
std::vector<std::string> split(const std::string& s, char delim) {
char* buffer = new char[s.size() + 1];
std::strcpy(buffer, s.c_str());
char* token = std::strtok(buffer, &delim);
std::vector<std::string> result;
while (token != nullptr) {
result.push_back(token);
token = std::strtok(nullptr, &delim);
}
delete[] buffer;
return result;
}
split
函数接受两个参数,第一个参数s
是需要切割的字符串,第二个参数delim
是分隔符;- 在函数内部申请一个大小为
s.size() + 1
的字符数组buffer
用于存储切割后的字符串,同时将s
的内容拷贝到buffer
中; - 调用
strtok
函数对buffer
进行切割,并将切割后的子字符串存储到容器中; - 重复上一步直到所有子字符串都被切割完毕,最后返回存储所有子字符串的容器。
以下是一个示例代码:
#include <iostream>
#include <vector>
std::vector<std::string> split(const std::string& s, char delim) {
char* buffer = new char[s.size() + 1];
std::strcpy(buffer, s.c_str());
char* token = std::strtok(buffer, &delim);
std::vector<std::string> result;
while (token != nullptr) {
result.push_back(token);
token = std::strtok(nullptr, &delim);
}
delete[] buffer;
return result;
}
int main() {
std::string s = "hello,world,how,are,you";
std::vector<std::string> result = split(s, ',');
for (const auto& token : result) {
std::cout << token << std::endl;
}
return 0;
}
以上代码输出结果与前一个示例相同。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现字符串切割的两种方法 - Python技术站