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