Posts: 929
Threads: 17
Joined: Mar 2012
Reputation:
0
it is possible, and i can think of a few different ways
post an example of it in use
for example
do you want to replace one for one like replace all 'c' with 'a'
replace all 'b' with 'c'
or replace all 'c' and 'b' with 'a'
Posts: 2,938
Threads: 162
Joined: May 2010
By Slice
pawn Код:
stock strreplace(string[], const search[], const replacement[], bool:ignorecase = false, pos = 0, limit = -1, maxlength = sizeof(string)){
// No need to do anything if the limit is 0.
if (limit == 0) return 0;
new
sublen = strlen(search),
replen = strlen(replacement),
bool:packed = ispacked(string),
maxlen = maxlength,
len = strlen(string),
count = 0
;
// "maxlen" holds the max string length (not to be confused with "maxlength", which holds the max. array size).
// Since packed strings hold 4 characters per array slot, we multiply "maxlen" by 4.
if (packed) maxlen *= 4;
// If the length of the substring is 0, we have nothing to look for..
if (!sublen) return 0;
// In this line we both assign the return value from "strfind" to "pos" then check if it's -1.
while (-1 != (pos = strfind(string, search, ignorecase, pos))) {
// Delete the string we found
strdel(string, pos, pos + sublen);
len -= sublen;
// If there's anything to put as replacement, insert it. Make sure there's enough room first.
if (replen && len + replen < maxlen) {
strins(string, replacement, pos, maxlength);
pos += replen;
len += replen;
}
// Is there a limit of number of replacements, if so, did we break it?
if (limit != -1 && ++count >= limit)
break;
}
return count;
}