Чтобы заменить все вхождения определенной подстроки в массив символов 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. Каждый метод имеет свои преимущества и может подойти для разных сценариев. Не стесняйтесь выбирать тот, который лучше всего соответствует вашим требованиям.