无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(c++ string split) C++中string字符串分割函数split()的4种实现方法 四种实现C++中字符串分割的方法 全网首发(图文详解1)

前沿技术 Micheal 5个月前 (06-19) 54次浏览 已收录 扫描二维码

(c++ string split) C++中string字符串分割函数split()的4种实现方法

在C++中,并没有内建的string.split()函数如同在Python等其他语言中。但是,可以通过不同的方法来实现字符串分割功能。以下是四种常用的实现方法,每种方法有其特点,适用于不同的场景:

方法1: 使用std::istringstreamgetline()

这种方法简单易用,适合于通过特定分隔符分割字符串。

#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::findsubstr

这种方法更加灵活,允许处理复杂的分割逻辑。

#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)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝