dst[dst_count++] = src[i];
}
}
+}
+
+char* replace(const char* src, const char* pattern, const char* replace_str)
+{
+ const size_t len = strlen(src);
+ const size_t plen = strlen(pattern);
+
+ uint32_t count = 0;
+ for (uint32_t i = 0; i < len; i++) {
+ if (strncmp(&src[i], pattern, plen) == 0)
+ count++;
+ }
+
+ const size_t rlen = strlen(replace_str);
+ const size_t difflen = count * (rlen - plen);
+ const size_t outlen = len + difflen + 1;
+ char* output = malloc(outlen);
+ if (output == NULL)
+ return NULL;
+ memset(output, 0, outlen);
+
+ uint32_t outi = 0;
+ for (uint32_t i = 0; i < len; i++) {
+ if (strncmp(&src[i], pattern, plen) == 0) {
+ memcpy(&output[outi], replace_str, rlen);
+ i += plen - 1;
+ outi += rlen;
+ } else {
+ output[outi++] = src[i];
+ }
+ }
+
+ return output;
}
\ No newline at end of file
void rename_string(const char* src, char* dst);
void rename_revert(const char* src, char* dst);
+char* replace(const char* src, const char* pattern, const char* replace_str);
+
#endif
\ No newline at end of file
assert_int_equal(length, 3);
}
+void replace_string()
+{
+ const char* input = "Hello Max!";
+
+ char* output = replace(input, "Max", "World");
+
+ assert_string_equal(output, "Hello World!");
+
+ free(output);
+ output = NULL;
+}
+
int main()
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(two_byte_wide_character),
cmocka_unit_test(three_byte_wide_character),
cmocka_unit_test(four_byte_wide_character),
+ cmocka_unit_test(replace_string)
};
return cmocka_run_group_tests(tests, setup_group, teardown_group);