В строках найти слово child и заменить его на children - C (СИ)
Формулировка задачи:
Нужно в строках найти слово child и заменить его на children так,что бы слово,которое идет после child не менялось.Вот мой код,в конце бред уже,я не знаю что там писать,помогите плиз,или скажите какими функциями пользоваться для решения.Заранее благодарю.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
int main()
{char s[200];
char a[3];
a[1]='r';
a[2]='e';
a[3]='n';
int i,n=5;
for( i=0;i<n;i++)
{ int cputs(char *s);
}
for(i=0;i<n;i++){
if (s[i] == 'c' && s[i+1]=='h' && s[i+2]=='i' && s[i+3]=='l' && s[i+4]=='d')
if (s[i+5]='\0')
{s[i+5]='r';
s[i+6]='e';
s[i+7]='n';}
else {for (i=5;i<200;0){ char *strcat(char *s, const char *a);} }
printf("%s",s[i]);
return 0;
}
}Решение задачи: «В строках найти слово child и заменить его на children»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
char* str_replace(size_t m, char* s, const char* w1, const char* w2){
size_t n, n1, n2, o;
char* p, *t = s;
if((s = strstr(s, w1)) == NULL)
return t;
n1 = strlen(w1);
n2 = strlen(w2);
if(n2 == n1){
do {
strncpy(s, w2, n2);
s += n2;
} while((s = strstr(s, w1)) != NULL);
} else if(n2 < n1){ //сжатие
for(p = s; *s; *s = *p){
if(! strncmp(p, w1, n1)){
strncpy(s, w2, n2);
s += n2;
p += n1;
continue;
} else
++s;
++p;
}
} else {//растяжение
n = strlen(s);
o = n2 - n1;
do {
if((n + o) > m)
break;
memmove(s + o, s, (n - (size_t)(s - t)) * sizeof(char));
strncpy(s, w2, n2);
s += n2;
n += o;
} while((s = strstr(s, w1)) != NULL);
}
return t;
}
int main(void){
char s[256] = "child, parent-child, (child), child, end=child";
puts(s);
puts( str_replace(sizeof(s)/sizeof(s[0])-1, s, "child", "children") );
return 0;
}
Объяснение кода листинга программы
- В функции
str_replaceосуществляется замена всех вхождений подстрокиw1наw2в строкеs. - Если
w2имеет длину меньше или равнуюw1, то происходит простое наращивание строкиsдо необходимого размера. - Если
w2длиннееw1, то происходит сжатие строкиsс выходом за границы целевой строки. - Если
w2корочеw1, то происходит растяжение строкиsдо необходимого размера. - Функция возвращает исходную строку
sв случае, если подстрокаw1не найдена в ней. - В функции
mainсоздаётся тестовая строкаs, содержащая подстрокуchildдля последующей замены наchildren. - С помощью функции
str_replaceв переменнойsпроисходит замена всех вхожденийchildнаchildren. - Выводится изменённая строка
sна экран. - Программа успешно завершается.