Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char* func(char *src, char *repl, char *on);
- int main(void)
- {
- char original[] = "foobarfoofoobaraaba";
- char replace[] = "bar";
- char on[] = "yes";
- char *result = NULL;
- result = func(original, replace, on);
- printf("%s\n", result);
- return 0;
- }
- char* func(char *src, char *repl, char *on)
- {
- int src_len = strlen(src);
- int repl_len = strlen(repl);
- int on_len = strlen(on);
- char *result = malloc((src_len + 1) * sizeof(char));
- if (result == NULL) {
- printf("malloc error\n");
- exit(-1);
- }
- strcpy(result, src);
- for (int i = 0; i < src_len - repl_len; i++) {
- int found = 1;
- for (int j = 0; j < repl_len; j++) {
- if (result[i + j] != repl[j]) {
- found = 0;
- break;
- }
- }
- if (found) {
- if (repl_len == on_len) {
- memcpy(&result[i], on, on_len);
- } else if (repl_len > on_len) {
- memcpy(&result[i], on, on_len);
- memmove(&result[i + on_len], &result[i + repl_len], src_len - i + repl_len);
- char *temp = realloc(result, src_len + (on_len - repl_len));
- if (temp == NULL) {
- printf("src realloc error!\n");
- exit(-1);
- }
- result = temp;
- src_len += (on_len - repl_len);
- } else {
- char *temp = realloc(result, (src_len + on_len + 1) * sizeof(char));
- if (temp == NULL) {
- printf("src realloc error!\n");
- exit(-1);
- }
- result = temp;
- src_len += on_len;
- memmove(&result[i + repl_len - 1], &result[i], src_len - i);
- memcpy(&result[i], on, on_len);
- }
- }
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement