cptr_replace

This commit is contained in:
Timerix22 2023-05-27 22:39:50 +06:00
parent 176cdb2d62
commit aba67710c7
3 changed files with 21 additions and 20 deletions

View File

@ -189,27 +189,29 @@ char* cptr_toUpper(const char* src) {
return p; return p;
} }
char* cptr_replaceChar(const char* src, char c_old, char c_new, u32 startIndex, u32 seekLength){ char* cptr_replaceCharIn(const char* src, char c_old, char c_new, u32 startIndex, u32 seekLength){
char* rzlt=cptr_copy(src); char* rzlt=cptr_copy(src);
char c=*src; for(u32 i=startIndex; i!=seekLength && src[i]!=0; i++){
for(u32 i=startIndex; i<seekLength && c!=0; i++, src++){ if(src[i]==c_old)
if(c==c_old) rzlt[i]=c_new;
*rzlt=c_new;
} }
return rzlt; return rzlt;
} }
char* cptr_replace(const char* src, char* str_old, char* str_new, u32 startIndex, u32 seekLength){ char* cptr_replaceIn(const char* src, const char* str_old, const char* str_new, u32 startIndex, u32 seekLength){
StringBuilder* sb=StringBuilder_create(); StringBuilder* sb=StringBuilder_create();
const u32 str_old_len=cptr_length(str_old); const u32 str_old_len=cptr_length(str_old);
const u32 str_new_len=cptr_length(str_new); const u32 str_new_len=cptr_length(str_new);
i32 i=startIndex; i32 i=startIndex;
while( (i=cptr_seek(src, str_old, i, -1)) !=-1 ){ while( (i=cptr_seek(src, str_old, startIndex, seekLength)) !=-1 ){
if(i!=0) if(i!=0)
StringBuilder_append_string(sb, (string){.ptr=(char*)src, .length=i}); StringBuilder_append_string(sb, (string){.ptr=(char*)src, .length=i});
StringBuilder_append_string(sb, (string){.ptr=str_new, .length=str_new_len}); StringBuilder_append_string(sb, (string){.ptr=str_new, .length=str_new_len});
src+=i+str_old_len; src+=i+str_old_len;
} }
u32 src_remains_len=cptr_length(src);
if(src_remains_len>0)
StringBuilder_append_string(sb, (string){.ptr=(char*)src, .length=src_remains_len});
string rezult=StringBuilder_build(sb); string rezult=StringBuilder_build(sb);
return rezult.ptr; return rezult.ptr;
} }

View File

@ -77,11 +77,17 @@ char* cptr_toUpper(const char* src);
/// @param startIndex 0 ... src length /// @param startIndex 0 ... src length
/// @param seekLength 0 ... -1 /// @param seekLength 0 ... -1
/// @return <src> with <str_old> replaced by <str_new> or empty cstring if <str_old> not found /// @return <src> with <str_old> replaced by <str_new> or empty cstring if <str_old> not found
char* cptr_replace(const char* src, char* str_old, char* str_new, u32 startIndex, u32 seekLength); char* cptr_replaceIn(const char* src, const char* str_old, const char* str_new, u32 startIndex, u32 seekLength);
/// @param startIndex 0 ... src length /// @param startIndex 0 ... src length
/// @param seekLength 0 ... -1 /// @param seekLength 0 ... -1
/// @return <src> with <c_old> replaced by <c_new> or empty cstring if <str_old> not found /// @return <src> with <c_old> replaced by <c_new> or empty cstring if <str_old> not found
char* cptr_replaceChar(const char* src, char c_old, char c_new, u32 startIndex, u32 seekLength); char* cptr_replaceCharIn(const char* src, char c_old, char c_new, u32 startIndex, u32 seekLength);
static inline char* cptr_replace(const char* src, const char* str_old, const char* str_new)
{ return cptr_replaceIn(src, str_old, str_new, 0, -1); }
static inline char* cptr_replaceChar(const char* src, char c_old, char c_new)
{ return cptr_replaceCharIn(src, c_old, c_new, 0, -1); }
#if __cplusplus #if __cplusplus
} }

View File

@ -1,14 +1,5 @@
#include "tests.h" #include "tests.h"
/*
TODO
test cptr_seek...
test cptr_...indexOf...
test cptr_replace...
cases:
*/
const char* strings[]={ const char* strings[]={
"", "",
"abab", "abab",
@ -70,7 +61,7 @@ const char* strings[]={
const int strings_len=sizeof(strings)/sizeof(strings[0]); const int strings_len=sizeof(strings)/sizeof(strings[0]);
void test_cptr(){ void test_cptr(){
// optime(__func__,1, optime(__func__,1,
kprintf("\e[96m-------------[test_cptr]--------------\n"); kprintf("\e[96m-------------[test_cptr]--------------\n");
// compare // compare
kprintf("\e[94m--------------[compare]---------------\n"); kprintf("\e[94m--------------[compare]---------------\n");
@ -157,5 +148,7 @@ void test_cptr(){
test_seekReverse("ab", "", 2, 2, -1) test_seekReverse("ab", "", 2, 2, -1)
test_seekReverse("ab", "b", 1, 2, 1) test_seekReverse("ab", "b", 1, 2, 1)
test_seekReverse("ab", "b", 1, 1, 1) test_seekReverse("ab", "b", 1, 1, 1)
// );
// TODO cptr_replace
);
} }