Implementation Split

This commit is contained in:
Leonetienne 2022-03-13 15:52:53 +01:00
parent 5f791b8d9f
commit 25bd269729
5 changed files with 60 additions and 20 deletions

2
.gitignore vendored
View File

@ -5,7 +5,7 @@
.idea/
# CMake
cmake-build-*/
*build*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml

View File

@ -4,7 +4,11 @@ project(Exec)
set(CMAKE_CXX_STANDARD 17)
include_directories(../Src)
link_directories(../Src/cmake-build-debug)
add_executable(Exec main.cpp)
target_link_libraries(Exec StringTools)
FILE(GLOB StringTools ../Src/*.cpp)
add_executable(Exec
${StringTools}
main.cpp
)

View File

@ -3,7 +3,11 @@
int main()
{
std::cout << StringTools::Replace("Hello, ${where}!\n", "${where}", "World") << std::endl;
std::vector<std::string> foo =
StringTools::Split("Hello, lol, test", ", ");
for (const auto& it : foo)
std::cout << "'" << it << "'" << std::endl;
return 0;
}

View File

@ -92,3 +92,31 @@ std::string StringTools::Upper(const std::string& str) {
return ss.str();
}
std::vector<std::string> StringTools::Split(const std::string& str, const std::string& seperator) {
std::vector<std::string> toRet;
// Quick-accept: seperator length is 0
if (seperator.length() == 0) {
for (const char c : str)
toRet.push_back(std::string(&c, (&c) + 1));
}
else {
std::size_t idx = 0;
while (idx != std::string::npos) {
std::size_t lastIdx = idx;
idx = str.find(seperator, idx + seperator.length());
toRet.push_back(str.substr(
lastIdx,
idx - lastIdx
));
if (idx != std::string::npos)
idx += seperator.length();
}
}
return toRet;
}

View File

@ -2,6 +2,7 @@
#define STRINGTOOLS_STRINGTOOLS_H
#include <string>
#include <vector>
/* Handy utensils to manipulate strings */
class StringTools
@ -25,6 +26,9 @@ public:
//! Will make a string all-uppercase.
static std::string Upper(const std::string& str);
//! Will split a string by a string seperator
static std::vector<std::string> Split(const std::string& str, const std::string& seperator);
private:
// No instanciation! >:(
StringTools();