diff --git a/Src/.StringTools.cpp.swp b/Src/.StringTools.cpp.swp new file mode 100644 index 0000000..47abbdc Binary files /dev/null and b/Src/.StringTools.cpp.swp differ diff --git a/Src/StringTools.cpp b/Src/StringTools.cpp index 346e1bd..fe16c93 100644 --- a/Src/StringTools.cpp +++ b/Src/StringTools.cpp @@ -95,7 +95,6 @@ std::string StringTools::Upper(const std::string& str) { std::vector StringTools::Split(const std::string& str, const std::string& seperator) { std::vector toRet; - // Quick-accept: str length is 0 if (str.length() == 0) toRet.push_back(""); @@ -132,3 +131,25 @@ std::vector StringTools::Split(const std::string& str, const std::s return toRet; } + +std::string StringTools::PadLeft(const std::string& str, const char pad, const std::size_t len) { + std::stringstream ss; + + for (std::size_t i = str.length(); i < len; i++) + ss << pad; + + ss << str; + + return ss.str(); +} + +std::string StringTools::PadRight(const std::string& str, const char pad, const std::size_t len) { + std::stringstream ss; + + ss << str; + + for (std::size_t i = str.length(); i < len; i++) + ss << pad; + + return ss.str(); +} diff --git a/Src/StringTools.h b/Src/StringTools.h index d65772a..e8de59d 100644 --- a/Src/StringTools.h +++ b/Src/StringTools.h @@ -29,6 +29,12 @@ public: //! Will split a string by a string seperator static std::vector Split(const std::string& str, const std::string& seperator); + //! Will pad a string to the left to length l + static std::string PadLeft(const std::string& str, const char pad, const std::size_t len); + + //! Will pad a string to the right to length l + static std::string PadRight(const std::string& str, const char pad, const std::size_t len); + private: // No instanciation! >:( StringTools(); diff --git a/Test/.String__PadRight.cpp.swp b/Test/.String__PadRight.cpp.swp new file mode 100644 index 0000000..de26dae Binary files /dev/null and b/Test/.String__PadRight.cpp.swp differ diff --git a/Test/CMakeLists.txt b/Test/CMakeLists.txt index 41ad3c9..dca5870 100644 --- a/Test/CMakeLists.txt +++ b/Test/CMakeLists.txt @@ -16,6 +16,7 @@ add_executable(Test String__Replace_Char.cpp String__Replace_String.cpp String__Split.cpp + String__PadLeft.cpp # CharTools-Tests Char__IsVowel.cpp diff --git a/Test/String__PadLeft.cpp b/Test/String__PadLeft.cpp new file mode 100644 index 0000000..e424e42 --- /dev/null +++ b/Test/String__PadLeft.cpp @@ -0,0 +1,44 @@ +#include +#include "Catch2.h" + +// Tests that padding to a length shorter adds no padding +TEST_CASE(__FILE__"/PadToShorterLength", "[Strings][PadLeft]") +{ + // Setup + const std::string in = "hello"; + + // Exercise + const std::string out = StringTools::PadLeft(in, '0', 3); + + // Verify + REQUIRE(out == "hello"); + return; +} + +// Tests that padding to a length equal adds no padding +TEST_CASE(__FILE__"/PadToEqualLength", "[Strings][PadLeft]") +{ + // Setup + const std::string in = "hello"; + + // Exercise + const std::string out = StringTools::PadLeft(in, '0', 5); + + // Verify + REQUIRE(out == "hello"); + return; +} + +// Tests that adding padding works +TEST_CASE(__FILE__"/Padding", "[Strings][PadLeft]") +{ + // Setup + const std::string in = "hello"; + + // Exercise + const std::string out = StringTools::PadLeft(in, '0', 7); + + // Verify + REQUIRE(out == "00hello"); + return; +} diff --git a/Test/String__PadRight.cpp b/Test/String__PadRight.cpp new file mode 100644 index 0000000..6846454 --- /dev/null +++ b/Test/String__PadRight.cpp @@ -0,0 +1,44 @@ +#include +#include "Catch2.h" + +// Tests that padding to a length shorter adds no padding +TEST_CASE(__FILE__"/PadToShorterLength", "[Strings][PadRight]") +{ + // Setup + const std::string in = "hello"; + + // Exercise + const std::string out = StringTools::PadRight(in, '0', 3); + + // Verify + REQUIRE(out == "hello"); + return; +} + +// Tests that padding to a length equal adds no padding +TEST_CASE(__FILE__"/PadToEqualLength", "[Strings][PadRight]") +{ + // Setup + const std::string in = "hello"; + + // Exercise + const std::string out = StringTools::PadRight(in, '0', 5); + + // Verify + REQUIRE(out == "hello"); + return; +} + +// Tests that adding padding works +TEST_CASE(__FILE__"/Padding", "[Strings][PadRight]") +{ + // Setup + const std::string in = "hello"; + + // Exercise + const std::string out = StringTools::PadRight(in, '0', 7); + + // Verify + REQUIRE(out == "hello00"); + return; +}