В языке программирования C замена подстроки в строке может быть реализована с использованием указателей и стандартных функций строки, таких как strcpy
и strcat
.
Вот пример функции, которая заменяет все вхождения одной подстроки на другую в исходной строке:
#include <stdio.h> #include <string.h> void replaceSubstring(char *str, const char *old, const char *new) { char result[100]; // Результирующая строка, куда будем записывать изменения int i, cnt = 0; int newLen = strlen(new); int oldLen = strlen(old); // Пока в исходной строке есть вхождения подстроки old while ((i = strstr(str, old) - str) != -1) { // Копируем все символы до вхождения подстроки в результирующую строку strncpy(result + cnt, str, i); cnt += i; str += i + oldLen; // Копируем новую подстроку в результирующую строку strncpy(result + cnt, new, newLen); cnt += newLen; } // Копируем остаток исходной строки в результирующую строку strcpy(result + cnt, str); // Копируем результирующую строку обратно в исходную strcpy(str, result); } int main() { char str[100] = "Hello, world! Hello, John! Hello, world!"; char old[10] = "Hello"; char new[10] = "Hi"; replaceSubstring(str, old, new); printf("%sn", str); // Выведет: "Hi, world! Hi, John! Hi, world!" return 0; }
В данном примере, сначала объявляется функция replaceSubstring
, которая принимает указатель на исходную строку (str
), указатель на подстроку, которую нужно заменить (old
), и указатель на новую подстроку, которой нужно заменить старую (new
).
Функция использует цикл, который выполняется до тех пор, пока в исходной строке есть вхождения подстроки old
. На каждой итерации цикла мы находим индекс первого вхождения подстроки old
в исходной строке (с помощью функции strstr
) и копируем все символы до этого вхождения в результирующую строку (result
). Затем мы переходим к концу найденной подстроки и копируем новую подстроку new
в результирующую строку. После завершения цикла мы копируем остаток исходной строки в результирующую строку. Наконец, результат перезаписывается в исходную строку.
При тестировании примера кода в main
мы видим, что все вхождения строки "Hello" заменяются на "Hi".