В строках найти слово child и заменить его на children - C (СИ)

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

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

Нужно в строках найти слово child и заменить его на children так,что бы слово,которое идет после child не менялось.Вот мой код,в конце бред уже,я не знаю что там писать,помогите плиз,или скажите какими функциями пользоваться для решения.Заранее благодарю.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. int main()
  6. {char s[200];
  7. char a[3];
  8. a[1]='r';
  9. a[2]='e';
  10. a[3]='n';
  11. int i,n=5;
  12. for( i=0;i<n;i++)
  13. { int cputs(char *s);
  14. }
  15. for(i=0;i<n;i++){
  16. if (s[i] == 'c' && s[i+1]=='h' && s[i+2]=='i' && s[i+3]=='l' && s[i+4]=='d')
  17. if (s[i+5]='\0')
  18. {s[i+5]='r';
  19. s[i+6]='e';
  20. s[i+7]='n';}
  21. else {for (i=5;i<200;0){ char *strcat(char *s, const char *a);} }
  22. printf("%s",s[i]);
  23. return 0;
  24. }
  25. }

Решение задачи: «В строках найти слово child и заменить его на children»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char* str_replace(size_t m, char* s, const char* w1, const char* w2){
  5.     size_t n, n1, n2, o;
  6.     char*  p, *t = s;
  7.     if((s = strstr(s, w1)) == NULL)
  8.         return t;
  9.  
  10.     n1 = strlen(w1);
  11.     n2 = strlen(w2);
  12.     if(n2 == n1){
  13.  
  14.         do {
  15.             strncpy(s, w2, n2);
  16.             s += n2;
  17.         } while((s = strstr(s, w1)) != NULL);
  18.  
  19.     } else if(n2 < n1){ //сжатие
  20.  
  21.         for(p = s; *s; *s = *p){
  22.             if(! strncmp(p, w1, n1)){
  23.                 strncpy(s, w2, n2);
  24.                 s += n2;
  25.                 p += n1;
  26.                 continue;
  27.             } else
  28.                 ++s;
  29.             ++p;
  30.         }
  31.  
  32.     } else {//растяжение
  33.         n = strlen(s);
  34.         o = n2 - n1;
  35.         do {
  36.             if((n + o) > m)
  37.                 break;
  38.  
  39.             memmove(s + o, s, (n - (size_t)(s - t)) * sizeof(char));
  40.             strncpy(s, w2, n2);
  41.             s += n2;
  42.             n += o;
  43.         } while((s = strstr(s, w1)) != NULL);
  44.     }
  45.     return t;
  46. }
  47.  
  48. int main(void){
  49.     char s[256] = "child, parent-child, (child), child, end=child";
  50.     puts(s);
  51.     puts( str_replace(sizeof(s)/sizeof(s[0])-1, s, "child", "children") );
  52.     return 0;
  53. }

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

  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

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

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

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