Как заменить подстроку в строке? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание: В строке все группы символов child заменить на children. Не судите строго, я только начинаю работать со строками)
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. main() {
  5. int k=0,i,d,n,j;
  6. char s[]="Hello child child child child";
  7. char r[strlen(s)];
  8. int t=strlen(s);
  9. for (i=0;i<t;i++)
  10. {
  11. if ((s[i]=='c')&&(s[i+1]=='h')&&(s[i+2]=='i')&&(s[i+3]=='l')&&(s[i+4]=='d')){
  12. if((i+6)!=t){
  13. n=i+4;
  14. d=i;
  15. strcpy(r,s+n);
  16. memmove(s+d,"children",10);
  17. strcat(s,r);}
  18. else
  19. memmove(s+d,"children",10);
  20. }
  21. }
  22. puts(s);
  23. return 0;
  24. }
Выдает Hello children children child chil( и еще какой-то символ). Тут, я как понял, я вышел за пределы строки, но в чем именно проблема понять не могу.

Решение задачи: «Как заменить подстроку в строке?»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define DELIM " \t\n"
  4. int main()
  5. {
  6.     char s[] = "Hello child child child child", word[] = "child", ns[80] = "", *ptr;
  7.     for (ptr = strtok(s, DELIM); ptr; ptr = strtok(NULL, DELIM)){
  8.         if(0 == strcmp(ptr, word))
  9.             strcat(ns, " children");
  10.         else
  11.             strcat(ns, ptr);
  12.     }
  13.     printf("%s", ns);
  14.     return 0;
  15. }

Объяснение кода листинга программы

В этом коде заменяется подстрока в строке. Вот список действий:

  1. Подготовка:
    • Включаются необходимые заголовочные файлы: stdio.h и string.h.
    • Определяется строка-разделитель (DELIM), которая разделяет исходную строку на слова.
    • Объявляются и инициализируются переменные: s, word и ns.
    • s - исходная строка с подстрокой, которую нужно заменить.
    • word - подстрока, которую нужно заменить.
    • ns - результирующая строка, в которой будет заменена подстрока.
    • Указатель ptr инициализируется значением strtok(s, DELIM).
  2. Цикл:
    • Цикл выполняется, пока ptr не станет равным NULL. Это происходит, когда все токены в строке s будут обработаны.
    • Внутри цикла проверяется, равно ли значение ptr подстроке word.
    • Если это так, то к ns добавляется строка children.
    • Если это не так, то к ns добавляется значение ptr.
  3. Вывод:
    • Выводится значение ns.
  4. Конец:
    • Возвращается 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы