Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <sstream>
- std::vector<std::string> str_split(const std::string& str, const std::string& whitespace = " \n\r\t", const uint32_t maxSplit = -1)
- {
- constexpr auto npos = std::string::npos;
- std::vector<std::string> vec;
- size_t i = 0;
- size_t amountSplit = 0;
- while (i != npos)
- {
- if (maxSplit != -1 && ++amountSplit > maxSplit)
- {
- i = str.find_first_not_of(whitespace, i);
- vec.emplace_back(str.data() + i, str.size() - i);
- return vec;
- }
- i = str.find_first_not_of(whitespace, i);
- if (i == npos)
- return vec;
- size_t endIdx = str.find_first_of(whitespace, i + 1);
- vec.emplace_back(str.data() + i,
- (endIdx == npos ? str.size() : endIdx) - i);
- i = endIdx;
- }
- return vec;
- }
- std::vector<std::string_view> str_split_sv(std::string_view str, std::string_view whitespace = " \n\r\t", const uint32_t maxSplit = -1)
- {
- constexpr auto npos = std::string_view::npos;
- std::vector<std::string_view> vec;
- size_t i = 0;
- size_t amountSplit = 0;
- while (i != npos)
- {
- if (maxSplit != -1 && ++amountSplit > maxSplit)
- {
- i = str.find_first_not_of(whitespace, i);
- vec.emplace_back(str.data() + i, str.size() - i);
- return vec;
- }
- i = str.find_first_not_of(whitespace, i);
- if (i == npos)
- return vec;
- size_t endIdx = str.find_first_of(whitespace, i + 1);
- vec.emplace_back(str.data() + i,
- (endIdx == npos ? str.size() : endIdx) - i);
- i = endIdx;
- }
- return vec;
- }
- std::vector<std::string> sstr_split(const std::string& input, const char delim = ' ')
- {
- std::stringstream stream{input};
- std::vector<std::string> result;
- for(std::string str; std::getline(stream, str, delim);)
- result.push_back(std::move(str));
- return result;
- }
- int main()
- {
- std::string str = "This is a test";
- auto vec = str_split_sv(str);
- std::cout << '"' << str << "\" (" << str.size() << " chars)\n" << vec.size() << " substrings:\n";
- for(size_t i = 0, len = vec.size(); i < len; ++i)
- std::cout << i << " - [" << vec[i] << "]\n";
- std::cout << "\nEnd of program.";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement