From 3b7ddda0f556086436a9d6520cb405aa20c4c2d4 Mon Sep 17 00:00:00 2001 From: etrushko05 Date: Sat, 25 Oct 2025 04:35:31 -0400 Subject: [PATCH] 13 --- Makefile | 2 +- myprog | Bin 25960 -> 26008 bytes str.c | 68 +++++++++++++++++++++++++++++++---------------------- str.o | Bin 5776 -> 7440 bytes str_test.c | 1 + str_test.o | Bin 11824 -> 11824 bytes 6 files changed, 42 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index c47f71d..ecf0998 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ OBJ = str.o str_test.o util.o -CFLAGS = -Wall +CFLAGS = -Wall TARGET=myprog diff --git a/myprog b/myprog index 89a528f04ff04025adeb1ac73e760913e8b70b4e..fd5a6f323102d86e369d91cc8969194b2f859098 100755 GIT binary patch delta 6398 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 diff --git a/str.c b/str.c index 98ebaf0..eeac533 100644 --- a/str.c +++ b/str.c @@ -152,34 +152,46 @@ str_sub(str *s, int start_idx, int length) return s2; } + // Hint: you can create temporary string object! -int -str_replace(str *s, char *substr, char *replacement) +int str_replace(str *s, char *substr, char *replacement) { - assert(s && substr && replacement); - int substr_len = strlen(substr); - int replacement_len = strlen(replacement); - int count = 0; - - str temp; - str_init(&temp); - - int pos = 0; - int found_pos; - - while ((found_pos = str_find(s, substr)) != -1) { - str_append_n(&temp, s->ptr + pos, found_pos - pos); - str_append(&temp, replacement); - pos = found_pos + substr_len; - count++; - } - - if (pos < s->len) { - str_append_n(&temp, s->ptr + pos, s->len - pos); - } - - str_set(s, str_data(&temp)); - str_deinit(&temp); - - return count; + assert(s && substr && replacement); + int substr_len = strlen(substr); + int count = 0; + + str temp; + str_init(&temp); + + int pos = 0; + int found_pos; + + found_pos = str_find(s, substr); + + while (found_pos != -1) { + str_append_n(&temp, s->ptr + pos, found_pos - pos); + str_append(&temp, replacement); + + pos = found_pos + substr_len; + count++; + + str search_str; + str_init(&search_str); + str_append_n(&search_str, s->ptr + pos, s->len - pos); + found_pos = str_find(&search_str, substr); + if (found_pos != -1) { + found_pos += pos; + } + str_deinit(&search_str); + } + + if (pos < s->len) { + str_append_n(&temp, s->ptr + pos, s->len - pos); + } + + str_set(s, str_data(&temp)); + + str_deinit(&temp); + + return count; } diff --git a/str.o b/str.o index f5f12e1443de1835788a136fabbf37895816916a..84b7e6dbcf6d765dd2182e8ddf5199221a4b9fbc 100644 GIT binary patch literal 7440 zcmbuEe{9=F6~ND#X|s`bSvR22LOuSd)^#&U+rcv0$u#}8-)U_YRWTD%CD(PnC8o}g z*mU!DYT2o}nF`9?a-!7@ z-gbl8MKtV|lZ$S!zg0F(R)gN?waA$_UZ;-Qp`)5RFrvL??bXidyS z%sDR~0dsG%Ufs=A=6GKd-{h?5g=#+515NCiV=X7;aO+XhY&3du>cdhV;mkLLPEQjz zAU=Cr-AQMuAx5EEPSzSn8!UYTg8HTo9$%}2S!V^rV%Di)b}fc}V}}@IXWdBU_MeFd zooX>U;jBa^oSNEPqRXj`{SKy}vHvwAs~^n&w~-}h8-fFU2@4RMN!T*Qr674-?nN2O zOO5lIYtmt@41s$+av6H5nd^F8g(yUmi)TQsEN~(&K@nEqiW|H|n-(O70osvly*Av>a1E&VLcD4IoZ~NAtnv$ z^M?&;_j|$pIf$|uH%Lyy0Oo|h5waO|a85Ty+xOQTLfHW$Y6yX|M0-y4uPE(57|;y( z0ln%851i${od@G(XL%m_O zc0tXU9q>%H)ONu$h~gVQT&T5(vuxT$e*1HeKzyhk;Jg^WckRw#jq9D6OHMX*-%dnalJ5*&kmiEVyS;J%i5|vj8t;+ScpU2-4Dg?IpCeh zriWskd*Zv|9rt&3?VzGGgs&4!k*AJ|$Y^_HOWXR^Gw?9m3JgD(viS9djqP7=>E5ue zr5`kuY%g+1BlxA|r?mVSa!5z;OUqp?A43l5hxn!CFKhWZvBMZA^fmiv8=_-5kl=Lf`N#M_{b=??mZ~?uA-kLee55T+>4NBR?+{;D*Oqu^J}sr_bk|Xiuk4$ zv`%{!@@I+vfVkYFz{|uT=wvFXOuR_EL|pDkkWCT)2XVO0w@%rYdk~9oki!L)O7$Lf`ue_VH{ z*%^*ILUC6peK3@ME|h*Yls*tj_k_~jp>$U$4Idng4R1DYs8Gy%Vl?libGc!-zk$hH zG?hvh3Lad>C)3%S7#*yO`#q^}GVgg>U0t%!7_MtE=nZDzK1EaV!o@<^XZ;n6^Sni=VEeh7INSfRGB5U9ob4aBIIc0K zKH|3h;|4e9!8bUbD{TJ-gPZekkvL`;KYWh8VR5$eTZ>aw{E-T_pYI#|V}?Il=-fmx z7JmsJO!r!x``u%4?sqS7yWf{A{dr|xT(CIXzi4ru|I4e`f79UR{QuS9+n`UjzX=_L z#N(~1s<_+YtiRLZ?9XoEn3?# zy~XyUw12uS&i0R3d#`#FPu8f0we7nYs7sNY{%ob}(f_+IMwPlkQ7-@hAt zlhN-%x{uLMbKOhCc^&3>OZ_(u%;zcILJ=Usz;!qESx!7(=3&kqc4+K+(_ zCR`W%a7s{tIlqgKTb$pyC5!WWcFN-XKAo{RzfZ4PoZqMXlxKhBVF|i1iX-MFI(HHl z=lAJxi}U-mWO06CZMV9h5vp{UjiKz{szA)*Y>xB&Am_5F`U15#8J2Bb{Lcntw*P0T z{esoN_Wvlf4O_p>v_SZK6%(!>w&nJ`eqnv1{s{e$AEkxCDu#sJ9^JIp4v<)+KUlnD X`EOO_+dr)R0AB8p(kj#6cKiPT#$}E7 literal 5776 zcmbuDU2IfE6vt;vX^Xa45EBel*9RI%=-Oh@R-sv2mR=NVMOGjZFWc=cUDxq3oMgkUODlCX_Xzm(Xrxf;EQoyWyPAp|Ft& z=M1N_Muvv7PH*Kk-;oPHQA736(3~+jF(=Y%jKhm%fb+wthcS?==kg_`s7Gf)bF$5M zrtNxYMOE^xL;ZZP28H!FCp{}$wyPnVE$%?m-E?3<_gl+FpTxds6Hu-z8_S95V_MLa zuDghKX5S0lT=+7cEhllequE|gtS}l}fO7^+ixa+H@+IxQGcCEsoU|I5T{SszQ;fM6 z+ul2qk$VEVGz0y~3At!yiWkkkazgp7kqOVZw}%4@RKB(9leZyVTjp|{GuHm-T*|K% z-jxn0$Uf9gPGrR>jA*8KM6Z|a$l=gzVRJ$`6P_z-Le9J4z_!JH*-IgtRpZSSk9VS6 zGqfW(GM3n1un)x8TgAgjr4IF2i0-bgr~GR+TYa%e!r#&w zSRZI^YH43fMJcpG$qCu&n&Hfx1y`As-hn}lnp;9 zm^$#m_AzOev3rn1YQqQHQw94ta!6b8!S;&HdHrL^A$8(|?GuIg)5sx}ivLrYOZIP` z?A@5Nenn@#{RTSlO6hMT`?jL^?tJ_nvX{~yC;Qt)@oIn#z>bkUT4aAUuYa2CyNc{D zsR=^nkuaoE+_>#w5{o=fcmZ6Vr$r&vQ1bylM05$|c;F&GLiMGTZy-KJb@qRb_&3Dm z0Sn~_ak=}U%>Hi>{~2;j_oz%9h8)|yO!a#y|D1S^>UETVPkfH*?EfqA8k$>f_bTy~ z#JQihi2I4xlHM|?FNYp+ic#SqK=lk=c_aC=pWIVmf2@T6Ci4G^G}eRHwZP`TNA*A};q3@K1^ZXnrq5q}kpC$bh8fX188fX1;CG@Xr{x?bgmd06sF?~1DjKx*t zUq@V@pADLSCB3K38fX0;jjtvBmrLjmx%eaC%Q|N?ofXvXMUAun9~$3C?Ot)|yZ8Gw z7hmpbcQsA`B%YrJYPVJ6+-`@)O%*P-5Xa2juAl6vPp?RlpvL(gu~*}KUpS<3z86es zobLtG8s~e#jK=w1;QsDmKlxt3_ayE=-wT2?Pt5sVuvg=JFF2%ez86esoX`Jhjq~|0 z0;#bfJJJWaomBZCmy%XI60ogNTLk1!x~u8Z-xzks*tw=YMB@P{1KnX-Yw=zewwa%`{xD%6*D1!8}ogleH?Jp?JJcV=Uiq zS1Pk;Bu>kos1P4%?Xp2{e;pW5^S{QoKrCwF`f#VC)c!iHLGC~MwnG73ni)`jmVVm! zHO_LJcY>YEZr3cuyBU^s-<`zt{^uy3&pX!9`;Y(K<@NrK(g(hm8pQX9u^i9u56ybp yfW&k)K4D(y#o+HCyie=#OMvO`4v?6oA7JOS0c%xx7xRkG;l~qFL}mG>9{(@iKn-I6 diff --git a/str_test.c b/str_test.c index 9df506a..935d361 100644 --- a/str_test.c +++ b/str_test.c @@ -99,6 +99,7 @@ test_it() "str_sub, не правильная строка %s", str_data(&s2)); str_deinit(&s2); + //TEST str_init //TEST str_replace str_set(&s, "foo bar baz foo"); str_replace(&s, "foo", "test"); diff --git a/str_test.o b/str_test.o index 4b7811a17dec6491b9a78b4207a13133a8dcf7bf..c2f99232681c30d4ee1ca6709f69df8c83b218b4 100644 GIT binary patch delta 21 dcmdlGvms`KDJNsrWJh*`iSIZ!=W`xZ0RUVT2o(ST delta 21 dcmdlGvms`KDJNs*WJh*`iSIZ!=W`xZ0RUVG2owMS