/* * MIT License * * Copyright (c) 2018-2020 Christian Berger * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef STRINGTOOLBOX_HPP #define STRINGTOOLBOX_HPP #include #include #include namespace stringtoolbox { /** * @return std::string without trailing whitespace characters. */ inline std::string &rtrim(std::string &str) noexcept { str.erase(str.find_last_not_of(" \t") + 1); return str; } /** * @return std::tring without leading whitespace characters. */ inline std::string <rim(std::string &str) noexcept { str.erase(0, str.find_first_not_of(" \t")); return str; } /** * @return std:string without leading and trailing whitespace characters. */ inline std::string &trim(std::string &str) noexcept { return ltrim(rtrim(str)); } /** * @return std:string where all occurrences of characters FROM are replaced with TO. */ inline std::string replaceAll(const std::string &str, const char &FROM, const char &TO) noexcept { std::string retVal{str}; std::replace(retVal.begin(), retVal.end(), FROM, TO); return retVal; } /** * @return std::vector where the given string is split along delimiter. */ inline std::vector split(const std::string &str, const char &delimiter) noexcept { std::vector retVal{}; std::string::size_type prev{0}; for (std::string::size_type i{str.find_first_of(delimiter, prev)}; i != std::string::npos; prev = i + 1, i = str.find_first_of(delimiter, prev)) { if (i != prev) { retVal.emplace_back(str.substr(prev, i - prev)); } else { retVal.emplace_back(""); } } if (prev < str.size()) { retVal.emplace_back(str.substr(prev, str.size() - prev)); } else if (prev > 0) { retVal.emplace_back(""); } return retVal; } } // namespace stringtoolbox #endif