diff --git a/lib/string.c b/lib/string.c index 537a237..653602b 100644 --- a/lib/string.c +++ b/lib/string.c @@ -395,3 +395,15 @@ size_t string_position_of(const string_t string, const char character) { } return position_found; } + +size_t string_last_position_of(const string_t string, const char character) { + size_t position_found = 0; + size_t string_length = string_get_length(string); + while (string_length > 0 && position_found == 0) { + if (string[string_length - 1] == character) { + position_found = string_length; + } + string_length--; + } + return position_found; +} diff --git a/lib/string.h b/lib/string.h index 6e659fb..e4e2b00 100644 --- a/lib/string.h +++ b/lib/string.h @@ -270,9 +270,20 @@ bool string_ends_with(const string_t string, const string_t prefix); * @param string * @param substring * @return size_t - * @example string_position_of("hello world", "e") // 2 + * @example string_position_of("hello world", 'e') // 2 * @since v4.2.0 */ size_t string_position_of(const string_t string, const char character); +/** + * @brief Returns the position (index + 1) within the string of the last occurrence of the specified substring (0 if not found). + * + * @param string + * @param character + * @return size_t + * @example string_last_position_of("hello world", 'o') // 8 + * @since v4.2.0 + */ +size_t string_last_position_of(const string_t string, const char character); + #endif diff --git a/test/string_test.c b/test/string_test.c index fef93bc..3998a5d 100644 --- a/test/string_test.c +++ b/test/string_test.c @@ -26,6 +26,7 @@ void string_test() { string_starts_with_test(); string_ends_with_test(); string_position_of_test(); + string_last_position_of_test(); } void string_get_length_test() { @@ -281,6 +282,7 @@ void string_ends_with_test() { void string_position_of_test() { assert(string_position_of("hello world", 'e') == 2); + assert(string_position_of("hello world", 'o') == 5); assert(string_position_of("abcdef", 'a') == 1); assert(string_position_of("abcdef", 'b') == 2); assert(string_position_of("abcdef", 'c') == 3); @@ -289,3 +291,15 @@ void string_position_of_test() { assert(string_position_of("abcdef", 'f') == 6); assert(string_position_of("abcdef", 'g') == 0); } + +void string_last_position_of_test() { + assert(string_last_position_of("hello world", 'e') == 2); + assert(string_last_position_of("hello world", 'o') == 8); + assert(string_last_position_of("abcdef", 'a') == 1); + assert(string_last_position_of("abcdef", 'b') == 2); + assert(string_last_position_of("abcdef", 'c') == 3); + assert(string_last_position_of("abcdef", 'd') == 4); + assert(string_last_position_of("abcdef", 'e') == 5); + assert(string_last_position_of("abcdef", 'f') == 6); + assert(string_last_position_of("abcdef", 'g') == 0); +} diff --git a/test/string_test.h b/test/string_test.h index 46550d5..c5109fc 100644 --- a/test/string_test.h +++ b/test/string_test.h @@ -60,4 +60,6 @@ void string_ends_with_test(); void string_position_of_test(); +void string_last_position_of_test(); + #endif