#include #include #include #define DEBUG false // String manipulation void str_init(char* str, int n) { // could also use for (int i = 0; i < n; i++) str[i] = ' '; str[n] = '\0'; } int str_replace_start(const char* string, const char* target, const char* replacement, char* output) { int l1 = strlen(string); int l2 = strlen(target); int l3 = strlen(replacement); int l4 = strlen(output); if (DEBUG) { printf("string: %s, target: %s, replacement: %s, output: %s\n", string, target, replacement, output); printf("%d,%d,%d,%d\n", l1, l2, l3, l4); } if ((l4 < (l1 - l2 + l3)) || l4 < l1) { printf("Not enough memory in output string.\n"); return 1; } int match = true; for (int i = 0; i < l2; i++) { if (string[i] != target[i]) { match = false; break; } } if (match) { if (DEBUG) printf("Found match.\n"); for (int i = 0; i < l3; i++) { output[i] = replacement[i]; } int counter = l3; for (int i = l2; i < l1; i++) { output[counter] = string[i]; counter++; } output[counter] = '\0'; return 2; // success } else { if (DEBUG) printf("Did not find match.\n"); strcpy(output, string); } return 0; } /* See also: * * https://github.com/irl/la-cucina/blob/master/str_replace.c */