Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.02 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3.  
  4. size_t replace(const char *src, char *dst, const char *pattern, const char *subs)
  5. {
  6.   const char *tail, *head;
  7.   int hits = 0;
  8.   size_t pattern_len, subs_len;
  9.  
  10.   if (!dst) {
  11.     head = src;
  12.     pattern_len = strlen(pattern);
  13.     while(head = strstr(head, pattern)) {
  14.       hits++;
  15.       head += pattern_len;
  16.     }
  17.     return (hits ? strlen(src) + hits * (strlen(subs) - pattern_len) : 0);
  18.   }
  19.  
  20.   tail = head = src;
  21.   pattern_len = strlen(pattern);
  22.   subs_len = strlen(subs);
  23.   while (head = strstr(head, pattern)) {
  24.     strncpy(dst, tail, head - tail);
  25.     dst = dst + (head - tail);
  26.     strcpy(dst, subs);
  27.     dst = dst + subs_len;
  28.     head += pattern_len;
  29.     tail = head;
  30.   }
  31.   strcpy(dst, tail);
  32.   return 0;
  33. }
  34.  
  35. void main()
  36. {
  37.   const char *s = "one two three foo two five two";
  38.   const char *p = "two", *subs = "zu";
  39.   char *d = NULL;
  40.   int d_l = 0;
  41.   d_l = replace(s, d, p, subs);
  42.   d = (char*)malloc(sizeof(char) * d_l + 1);
  43.   replace(s, d, p, subs);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement