From f23dbbb5655854b591d0d140ab4400f26669acfc Mon Sep 17 00:00:00 2001 From: paxcut <53811119+paxcut@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:25:34 -0700 Subject: [PATCH] includes/std: Fixed std::string::replace not replacing sequences correctly (#198) fix: [Bug] std::string::replace("aa", "aa", "") returns "a" #1408 --- includes/std/string.pat | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/includes/std/string.pat b/includes/std/string.pat index 833ce18..dbe6043 100644 --- a/includes/std/string.pat +++ b/includes/std/string.pat @@ -209,31 +209,27 @@ namespace std::string { @param replace The substring to replace with. @return The string with the replacements. */ - fn replace(str string, str pattern, str replace) { - u32 string_len, pattern_len, replace_len; - string_len = std::string::length(string); - pattern_len = std::string::length(pattern); - replace_len = std::string::length(replace); - - if (pattern_len > string_len) - return string; - + fn replace(str string, str pattern, str replace) { + s32 string_len = std::string::length(string); + s32 pattern_len = std::string::length(pattern); + + if (pattern_len > string_len || pattern_len * string_len == 0 ) + return string; + str result; - u32 i; - while (i <= (string_len - pattern_len)) { - - if (std::string::substr(string, i, pattern_len) == pattern) { - result = result + replace; - i = i + pattern_len; - } else { - result = result + std::string::at(string, i); - i = i + 1; + s32 string_index; + s32 remaining_len = string_len; + while (pattern_len <= remaining_len) { + if (std::string::substr(string, string_index, pattern_len) == pattern) { + result += replace; + string_index += pattern_len; + } else { + result += std::string::at(string, string_index); + string_index += 1; } + remaining_len = string_len - string_index; } - result = result + std::string::substr(string,string_len-pattern_len+1,pattern_len); - + result += std::string::substr(string, string_index, remaining_len ); return result; }; - - }