1
1
mirror of https://github.com/theoludwig/libcproject.git synced 2024-12-11 21:13:00 +01:00

feat: add string_last_position_of

This commit is contained in:
Théo LUDWIG 2023-12-26 20:40:46 +01:00
parent ec6e748d24
commit 1e0bf99ef6
Signed by: theoludwig
GPG Key ID: ADFE5A563D718F3B
4 changed files with 40 additions and 1 deletions

View File

@ -395,3 +395,15 @@ size_t string_position_of(const string_t string, const char character) {
} }
return position_found; 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;
}

View File

@ -270,9 +270,20 @@ bool string_ends_with(const string_t string, const string_t prefix);
* @param string * @param string
* @param substring * @param substring
* @return size_t * @return size_t
* @example string_position_of("hello world", "e") // 2 * @example string_position_of("hello world", 'e') // 2
* @since v4.2.0 * @since v4.2.0
*/ */
size_t string_position_of(const string_t string, const char character); 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 #endif

View File

@ -26,6 +26,7 @@ void string_test() {
string_starts_with_test(); string_starts_with_test();
string_ends_with_test(); string_ends_with_test();
string_position_of_test(); string_position_of_test();
string_last_position_of_test();
} }
void string_get_length_test() { void string_get_length_test() {
@ -281,6 +282,7 @@ void string_ends_with_test() {
void string_position_of_test() { void string_position_of_test() {
assert(string_position_of("hello world", 'e') == 2); 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", 'a') == 1);
assert(string_position_of("abcdef", 'b') == 2); assert(string_position_of("abcdef", 'b') == 2);
assert(string_position_of("abcdef", 'c') == 3); 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", 'f') == 6);
assert(string_position_of("abcdef", 'g') == 0); 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);
}

View File

@ -60,4 +60,6 @@ void string_ends_with_test();
void string_position_of_test(); void string_position_of_test();
void string_last_position_of_test();
#endif #endif