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

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

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

Задание: В строке все группы символов child заменить на children. Не судите строго, я только начинаю работать со строками)
#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;
}
Выдает Hello children children child chil( и еще какой-то символ). Тут, я как понял, я вышел за пределы строки, но в чем именно проблема понять не могу.

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

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;
}

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

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

  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
Похожие ответы