Как заменить подстроку в строке? - C (СИ)
Формулировка задачи:
Задание: В строке все группы символов child заменить на children.
Не судите строго, я только начинаю работать со строками)
Выдает Hello children children child chil( и еще какой-то символ). Тут, я как понял, я вышел за пределы строки, но в чем именно проблема понять не могу.
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- main() {
- int k=0,i,d,n,j;
- char s[]="Hello child child child child";
- char r[strlen(s)];
- int t=strlen(s);
- for (i=0;i<t;i++)
- {
- if ((s[i]=='c')&&(s[i+1]=='h')&&(s[i+2]=='i')&&(s[i+3]=='l')&&(s[i+4]=='d')){
- if((i+6)!=t){
- n=i+4;
- d=i;
- strcpy(r,s+n);
- memmove(s+d,"children",10);
- strcat(s,r);}
- else
- memmove(s+d,"children",10);
- }
- }
- puts(s);
- return 0;
- }
Решение задачи: «Как заменить подстроку в строке?»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #define DELIM " \t\n"
- int main()
- {
- char s[] = "Hello child child child child", word[] = "child", ns[80] = "", *ptr;
- for (ptr = strtok(s, DELIM); ptr; ptr = strtok(NULL, DELIM)){
- if(0 == strcmp(ptr, word))
- strcat(ns, " children");
- else
- strcat(ns, ptr);
- }
- printf("%s", ns);
- return 0;
- }
Объяснение кода листинга программы
В этом коде заменяется подстрока в строке. Вот список действий:
- Подготовка:
- Включаются необходимые заголовочные файлы: stdio.h и string.h.
- Определяется строка-разделитель (DELIM), которая разделяет исходную строку на слова.
- Объявляются и инициализируются переменные: s, word и ns.
- s - исходная строка с подстрокой, которую нужно заменить.
- word - подстрока, которую нужно заменить.
- ns - результирующая строка, в которой будет заменена подстрока.
- Указатель ptr инициализируется значением strtok(s, DELIM).
- Цикл:
- Цикл выполняется, пока ptr не станет равным NULL. Это происходит, когда все токены в строке s будут обработаны.
- Внутри цикла проверяется, равно ли значение ptr подстроке word.
- Если это так, то к ns добавляется строка
children
. - Если это не так, то к ns добавляется значение ptr.
- Вывод:
- Выводится значение ns.
- Конец:
- Возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д