algorithm-dev

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub today2098/algorithm-dev

:warning: 文字列分割
(algorithm/Utils/split.hpp)

概要

与えられた文字列を任意の文字または文字列で分割する.

参考

  1. “std::ranges::split_view”. cpprefjp - C++日本語リファレンス. https://cpprefjp.github.io/reference/ranges/split_view.html.
  2. MaryCore. “C++ std::string 文字列の分割(split)|区切り文字/文字列に対応”. https://marycore.jp/prog/cpp/std-string-split/.
  3. MaryCore. “C++ 正規表現で文字列の分割(split)【std::regex_token_iterator】”. https://marycore.jp/prog/cpp/std-regex-split-regex-token-iterator/.

Code

#ifndef ALGORITHM_SPLIT_HPP
#define ALGORITHM_SPLIT_HPP 1

#include <ranges>
#include <sstream>
#include <string>
#include <string_view>
#include <vector>

namespace algorithm {

// 文字列分割.文字列sを文字delimで分割する.
std::vector<std::string> split(std::string_view sv, char delim, bool disable_empty = false) {
    std::vector<std::string> res;
    std::stringstream ss;
    ss << sv << delim;
    std::string item;
    while(std::getline(ss, item, delim)) {
        if(!(disable_empty and item.empty())) res.push_back(item);
    }
    return res;
}

// 文字列分割.文字列sを文字列delimで分割する.
std::vector<std::string> split(std::string_view sv, std::string_view delim, bool disable_empty = false) {
    std::vector<std::string> res;
    for(auto item : sv | std::ranges::views::split(delim)) {
        if(!(disable_empty and item.empty())) res.emplace_back(item.begin(), item.end());
    }
    return res;
}

}  // namespace algorithm

#endif
#line 1 "algorithm/Utils/split.hpp"



#include <ranges>
#include <sstream>
#include <string>
#include <string_view>
#include <vector>

namespace algorithm {

// 文字列分割.文字列sを文字delimで分割する.
std::vector<std::string> split(std::string_view sv, char delim, bool disable_empty = false) {
    std::vector<std::string> res;
    std::stringstream ss;
    ss << sv << delim;
    std::string item;
    while(std::getline(ss, item, delim)) {
        if(!(disable_empty and item.empty())) res.push_back(item);
    }
    return res;
}

// 文字列分割.文字列sを文字列delimで分割する.
std::vector<std::string> split(std::string_view sv, std::string_view delim, bool disable_empty = false) {
    std::vector<std::string> res;
    for(auto item : sv | std::ranges::views::split(delim)) {
        if(!(disable_empty and item.empty())) res.emplace_back(item.begin(), item.end());
    }
    return res;
}

}  // namespace algorithm
Back to top page