cptr_replace
This commit is contained in:
parent
176cdb2d62
commit
aba67710c7
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user