C++程序 将字符串拆分为多个子字符串
在C++中,我们需要将字符串拆分为多个子字符串的场景经常会遇到,本文将介绍这个问题的几种解决方案。我们将按照实现不同的方法进行讨论,通过示例代码进行说明。
方法一:使用C++ STL库
C++ STL库中提供了一个字符串处理函数split()
,可以很方便地实现字符串拆分功能。示例代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
vector<string> split(const string &str, char delim) {
vector<string> res;
stringstream ss(str);
string item;
while (getline(ss, item, delim)) {
res.push_back(item);
}
return res;
}
int main() {
string s = "hello world, this is test";
vector<string> res = split(s, ' ');
for (auto &i : res) {
cout << i << endl;
}
return 0;
}
方法二:使用C语言中的strtok函数
在C语言中,有一个很常用的字符串处理函数strtok()
可以完成字符串拆分功能。示例代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[] = "hello world, this is test";
char *token = strtok(s, " ");
while (token != NULL) {
cout << token << endl;
token = strtok(NULL, " ");
}
return 0;
}
方法三:手动实现拆分功能
手动实现字符串拆分功能虽然代码比较长,但是有助于理解拆分功能的实现过程。示例代码如下:
#include <iostream>
#include <vector>
using namespace std;
vector<string> split(const string &str, char delim) {
vector<string> res;
size_t prev_pos = 0, pos = 0;
while ((pos = str.find(delim, pos)) != string::npos) {
string tmp = str.substr(prev_pos, pos - prev_pos);
res.push_back(tmp);
prev_pos = ++pos;
}
res.push_back(str.substr(prev_pos, pos - prev_pos));
return res;
}
int main() {
string s = "hello world, this is test";
vector<string> res = split(s, ' ');
for (auto &i : res) {
cout << i << endl;
}
return 0;
}
结论
本文介绍了三种不同的方法实现字符串拆分功能,分别是使用C++ STL库中的split()
函数,使用C语言中的strtok()
函数,手动实现拆分功能。实现方式不同,复杂度也不同,选择不同方法可以根据实际情况自行选择。