Методы замены всех вхождений подстроки в массив символов C

Чтобы заменить все вхождения определенной подстроки в массив символов C, вы можете использовать несколько методов. Вот несколько часто используемых подходов:

Метод 1: использование цикла
Вы можете перебирать массив символов и заменять каждое вхождение подстроки вручную. Вот пример реализации:

void replaceAllOccurrences(char* str, const char* find, const char* replace) {
    int findLen = strlen(find);
    int replaceLen = strlen(replace);
    char* pos = strstr(str, find);
    while (pos != NULL) {
        memmove(pos + replaceLen, pos + findLen, strlen(pos + findLen) + 1);
        memcpy(pos, replace, replaceLen);
        pos = strstr(pos + replaceLen, find);
    }
}

Метод 2: использование функции strtok
Вы можете токенизировать массив символов с помощью функции strtokи перестроить строку, заменяя вхождения. Вот пример реализации:

void replaceAllOccurrences(char* str, const char* find, const char* replace) {
    char* token;
    char* rest = str;
    size_t replaceLen = strlen(replace);
    while ((token = strtok_r(rest, find, &rest))) {
        memmove(token + replaceLen, token + strlen(find), strlen(token + strlen(find)) + 1);
        memcpy(token, replace, replaceLen);
    }
}

Метод 3: использование функций strstrи sprintf.
Вы можете найти вхождения подстроки с помощью strstrи заменить их с помощью спринтф. Вот пример реализации:

void replaceAllOccurrences(char* str, const char* find, const char* replace) {
    char* pos = str;
    size_t findLen = strlen(find);
    size_t replaceLen = strlen(replace);
    while ((pos = strstr(pos, find))) {
        memmove(pos + replaceLen, pos + findLen, strlen(pos + findLen) + 1);
        memcpy(pos, replace, replaceLen);
        pos += replaceLen;
    }
}

Это всего лишь несколько методов замены всех вхождений подстроки в массив символов C. Каждый метод имеет свои преимущества и может подойти для разных сценариев. Не стесняйтесь выбирать тот, который лучше всего соответствует вашим требованиям.