From 7512997cc085cc3b0991d5193d36e00357795850 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 13 Apr 2024 10:28:10 -0700 Subject: [PATCH] add strip_whitespace --- src/Strings.hh | 17 +++++++++++++++++ src/StringsTest.cc | 29 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Strings.hh b/src/Strings.hh index 614f086..afeac0c 100644 --- a/src/Strings.hh +++ b/src/Strings.hh @@ -57,6 +57,23 @@ void strip_leading_whitespace(StrT& s) { } } +template +void strip_whitespace(StrT& s) { + size_t start_index = s.find_first_not_of(" \t\r\n"); + size_t end_index = s.find_last_not_of(" \t\r\n"); + fprintf(stderr, "%zu %zu\n", start_index, end_index); + if (start_index != StrT::npos && end_index != StrT::npos) { + if (start_index) { + s = s.substr(start_index, end_index - start_index + 1); + } else { + s.resize(end_index + 1); + } + } else if (!s.empty() && + ((s[0] == ' ') || (s[0] == '\t') || (s[0] == '\r') || (s[0] == '\n'))) { + s.resize(0); // String is entirely whitespace + } +} + std::string escape_quotes(const std::string& s); std::string escape_url(const std::string& s, bool escape_slash = false); diff --git a/src/StringsTest.cc b/src/StringsTest.cc index 451d3ea..213eda1 100644 --- a/src/StringsTest.cc +++ b/src/StringsTest.cc @@ -485,6 +485,35 @@ int main(int, char**) { expect_eq(s5, ""); } + { + fprintf(stderr, "-- strip_whitespace\n"); + + string s = "abcdef"; + strip_whitespace(s); + fprintf(stderr, "%s\n", s.c_str()); + expect_eq(s, "abcdef"); + + s = "abcdef\r\n"; + strip_whitespace(s); + expect_eq(s, "abcdef"); + + s = " \nabc\tdef"; + strip_whitespace(s); + expect_eq(s, "abc\tdef"); + + s = " \nabc\tdef \r\n"; + strip_whitespace(s); + expect_eq(s, "abc\tdef"); + + s = ""; + strip_whitespace(s); + expect_eq(s, ""); + + s = " \t\r\n "; + strip_whitespace(s); + expect_eq(s, ""); + } + { fprintf(stderr, "-- string_printf\n"); string result = string_printf("%s %" PRIu64 " 0x%04hX", "lolz",