Как заменить подстроку в строке? - 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, что означает успешное выполнение программы.