AK: Add invert_case() and invert_case(StringView)

In the given String, invert_case() swaps lowercase characters with
uppercase ones and vice versa.
This commit is contained in:
huttongrabiel 2022-05-18 22:23:45 -07:00 committed by Linus Groh
parent b1709c368f
commit 8ffa860bc3
Notes: sideshowbarker 2024-07-17 10:37:41 +09:00
4 changed files with 21 additions and 0 deletions

View file

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

View file

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

View file

@ -462,6 +462,20 @@ String to_titlecase(StringView str)
return builder.to_string(); 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) String replace(StringView str, StringView needle, StringView replacement, bool all_occurrences)
{ {
if (str.is_empty()) if (str.is_empty())

View file

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