Просмотр исходного кода

AK: Add invert_case() and invert_case(StringView)

In the given String, invert_case() swaps lowercase characters with
uppercase ones and vice versa.
huttongrabiel 3 лет назад
Родитель
Сommit
8ffa860bc3
4 измененных файлов с 21 добавлено и 0 удалено
  1. 5 0
      AK/String.cpp
  2. 1 0
      AK/String.h
  3. 14 0
      AK/StringUtils.cpp
  4. 1 0
      AK/StringUtils.h

+ 5 - 0
AK/String.cpp

@@ -388,6 +388,11 @@ String String::to_titlecase() const
     return StringUtils::to_titlecase(*this);
 }
 
+String String::invert_case() const
+{
+    return StringUtils::invert_case(*this);
+}
+
 bool operator<(char const* characters, String const& string)
 {
     return string.view() > characters;

+ 1 - 0
AK/String.h

@@ -121,6 +121,7 @@ public:
     [[nodiscard]] String to_uppercase() const;
     [[nodiscard]] String to_snakecase() const;
     [[nodiscard]] String to_titlecase() const;
+    [[nodiscard]] String invert_case() const;
 
     [[nodiscard]] bool is_whitespace() const { return StringUtils::is_whitespace(*this); }
 

+ 14 - 0
AK/StringUtils.cpp

@@ -462,6 +462,20 @@ String to_titlecase(StringView str)
     return builder.to_string();
 }
 
+String invert_case(StringView str)
+{
+    StringBuilder builder(str.length());
+
+    for (auto ch : str) {
+        if (is_ascii_lower_alpha(ch))
+            builder.append(to_ascii_uppercase(ch));
+        else
+            builder.append(to_ascii_lowercase(ch));
+    }
+
+    return builder.to_string();
+}
+
 String replace(StringView str, StringView needle, StringView replacement, bool all_occurrences)
 {
     if (str.is_empty())

+ 1 - 0
AK/StringUtils.h

@@ -78,6 +78,7 @@ Optional<size_t> find_any_of(StringView haystack, StringView needles, SearchDire
 
 String to_snakecase(StringView);
 String to_titlecase(StringView);
+String invert_case(StringView);
 
 String replace(StringView, StringView needle, StringView replacement, bool all_occurrences = false);
 size_t count(StringView, StringView needle);