Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char* func(char *src, char *repl, char *on);
  6.  
  7. int main(void)
  8. {
  9. char original[] = "foobarfoofoobaraaba";
  10. char replace[] = "bar";
  11. char on[] = "yes";
  12.  
  13. char *result = NULL;
  14. result = func(original, replace, on);
  15.  
  16. printf("%s\n", result);
  17.  
  18. return 0;
  19. }
  20.  
  21. char* func(char *src, char *repl, char *on)
  22. {
  23. int src_len = strlen(src);
  24. int repl_len = strlen(repl);
  25. int on_len = strlen(on);
  26. char *result = malloc((src_len + 1) * sizeof(char));
  27. if (result == NULL) {
  28. printf("malloc error\n");
  29. exit(-1);
  30. }
  31. strcpy(result, src);
  32.  
  33. for (int i = 0; i < src_len - repl_len; i++) {
  34.  
  35. int found = 1;
  36. for (int j = 0; j < repl_len; j++) {
  37. if (result[i + j] != repl[j]) {
  38. found = 0;
  39. break;
  40. }
  41. }
  42.  
  43. if (found) {
  44. if (repl_len == on_len) {
  45. memcpy(&result[i], on, on_len);
  46. } else if (repl_len > on_len) {
  47. memcpy(&result[i], on, on_len);
  48. memmove(&result[i + on_len], &result[i + repl_len], src_len - i + repl_len);
  49. char *temp = realloc(result, src_len + (on_len - repl_len));
  50. if (temp == NULL) {
  51. printf("src realloc error!\n");
  52. exit(-1);
  53. }
  54. result = temp;
  55. src_len += (on_len - repl_len);
  56. } else {
  57. char *temp = realloc(result, (src_len + on_len + 1) * sizeof(char));
  58. if (temp == NULL) {
  59. printf("src realloc error!\n");
  60. exit(-1);
  61. }
  62. result = temp;
  63. src_len += on_len;
  64. memmove(&result[i + repl_len - 1], &result[i], src_len - i);
  65. memcpy(&result[i], on, on_len);
  66. }
  67.  
  68. }
  69. }
  70.  
  71. return result;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement