Best way of replacing a string?
#1

Hello, What is the best way to replace a string?

Example: format(test[playerid], sizeof(test[playerid]), "%s","replaceing");

I have heard that strcat is better but that function only seems to join together two strings... I don't wont to do that I like to replace the whole content of test[playerid].
Reply
#2

This does replace the test[playerid] string with "replaceing".
If it does not do it successfully, then either the ShowClientMessage OR the format line does NOT get read by the compiler.
Reply
#3

strpack(string, newstring);

Example: strpack(string, "Hi, how are you?");

Source: sa-mp wiki.
Reply
#4

Thank you!
Reply
#5

What about this by Slice:
pawn Code:
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;
}
Usage:
pawn Code:
new string[128] = "Hello world";

strreplace(string, "world", "earth"); // string = "Hello earth"
strreplace(string, "HELLO", "Hola"); // string = "Hello earth" (no match for "HELLO")
strreplace(string, "HELLO", "Hola", .ignorecase = true); // string = "Hola earth"
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)