В строках найти слово 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;
}

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

  1. В функции str_replace осуществляется замена всех вхождений подстроки w1 на w2 в строке s.
  2. Если w2 имеет длину меньше или равную w1, то происходит простое наращивание строки s до необходимого размера.
  3. Если w2 длиннее w1, то происходит сжатие строки s с выходом за границы целевой строки.
  4. Если w2 короче w1, то происходит растяжение строки s до необходимого размера.
  5. Функция возвращает исходную строку s в случае, если подстрока w1 не найдена в ней.
  6. В функции main создаётся тестовая строка s, содержащая подстроку child для последующей замены на children.
  7. С помощью функции str_replace в переменной s происходит замена всех вхождений child на children.
  8. Выводится изменённая строка s на экран.
  9. Программа успешно завершается.

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


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

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

14   голосов , оценка 4.143 из 5
Похожие ответы