From 028ee887b02a947da0d0edecb4f9a8fae931977e Mon Sep 17 00:00:00 2001 From: etrushko05 Date: Sat, 1 Nov 2025 06:03:19 -0400 Subject: [PATCH] 15 --- str.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/str.c b/str.c index eeac533..cf078d2 100644 --- a/str.c +++ b/str.c @@ -159,35 +159,41 @@ int str_replace(str *s, char *substr, char *replacement) assert(s && substr && replacement); int substr_len = strlen(substr); int count = 0; - str temp; - str_init(&temp); + str_init(&temp); int pos = 0; int found_pos; - found_pos = str_find(s, substr); - + //poziciya iscomogo + while (found_pos != -1) { str_append_n(&temp, s->ptr + pos, found_pos - pos); + //dobavlyaet str mezhdu proshlym i sled vhozhdenyem str_append(&temp, replacement); - + //dobavlyaem zamenu + pos = found_pos + substr_len; count++; + //perehodim na pos posle zamenennoi str str search_str; str_init(&search_str); + //esche odna vremennaya stroka str_append_n(&search_str, s->ptr + pos, s->len - pos); + //copiruem v neye vse posle pos found_pos = str_find(&search_str, substr); + //ichem v nei novoe vhozhdeniye if (found_pos != -1) { found_pos += pos; } + //nahodim poziciyu v ishodnoy str str_deinit(&search_str); } - if (pos < s->len) { str_append_n(&temp, s->ptr + pos, s->len - pos); } + //dobavlyaem ostatok str str_set(s, str_data(&temp));