(c++ string split) C++中string字符串分割函数split()的4种实现方法
在C++中,并没有内建的string.split()
函数如同在Python等其他语言中。但是,可以通过不同的方法来实现字符串分割功能。以下是四种常用的实现方法,每种方法有其特点,适用于不同的场景:
方法1: 使用std::istringstream
和getline()
这种方法简单易用,适合于通过特定分隔符分割字符串。
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
std::vector<std::string> splitUsingGetline(const std::string& str, char delimiter) {
std::vector<std::string> result;
std::istringstream iss(str);
std::string token;
while (std::getline(iss, token, delimiter)) {
result.push_back(token);
}
return result;
}
int main() {
std::string str = "This,is,a,sample,string";
char delimiter = ',';
std::vector<std::string> tokens = splitUsingGetline(str, delimiter);
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
}
方法2: 使用std::find
和substr
这种方法更加灵活,允许处理复杂的分割逻辑。
#include <iostream>
#include <vector>
#include <string>
std::vector<std::string> splitUsingFind(const std::string& str, const std::string& delimiter) {
std::vector<std::string> result;
size_t startPos = 0;
size_t endPos = 0;
while ((endPos = str.find(delimiter, startPos)) != std::string::npos) {
result.push_back(str.substr(startPos, endPos - startPos));
startPos = endPos + delimiter.length();
}
result.push_back(str.substr(startPos));
return result;
}
int main() {
std::string str = "This is a sample string";
std::string delimiter = " ";
std::vector<std::string> tokens = splitUsingFind(str, delimiter);
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
}
方法3: 使用std::sregex_token_iterator
这种方法使用正则表达式进行字符串分割,功能最为强大。
#include <iostream>
#include <vector>
#include <string>
#include <regex>
std::vector<std::string> splitUsingRegex(const std::string& str, const std::string& regexPattern) {
std::regex rgx(regexPattern);
std::sregex_token_iterator iter(str.begin(), str.end(), rgx, -1);
std::sregex_token_iterator end;
std::vector<std::string> result;
for ( ; iter != end; ++iter) {
result.push_back(*iter);
}
return result;
}
int main() {
std::string str = "This is a sample string";
std::string regexPattern = "\\s+"; // Regex pattern for whitespace
std::vector<std::string> tokens = splitUsingRegex(str, regexPattern);
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
}
方法4: 自定义split
函数
有时为了获得更好的性能或特定的分割逻辑,自定义一个split
函数是必要的。
#include <iostream>
#include <vector>
#include <string>
std::vector<std::string> customSplit(const std::string& str, char delimiter) {
std::vector<std::string> result;
std::string current;
for (char ch : str) {
if (ch == delimiter) {
if (!current.empty()) {
result.push_back(current);
current.clear();
}
} else {
current += ch;
}
}
if (!current.empty()) result.push_back(current);
return result;
}
int main() {
std::string str = "This,is,a,sample,string";
char delimiter = ',';
std::vector<std::string> tokens = customSplit(str, delimiter);
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
}
以上给出的是四种实现C++中字符串分割的方法,每种方法都有注释说明,你可以根据自己项目的需求选择合适的方法。
(background 透明) CSS设置背景颜色透明的两种方法实例详解 CSS 设置背景颜色透明: rgba 和 opacity 全网首发(图文详解1)
(jzfz_cnb字体下载) JZFZ_CNB.SHX字体 AutoCAD字体 AutoCAD 使用 SHX 字体文件 全网首发(图文详解1)