From 545f926f0bb1f1ee4a98a4b4a75b328ed3dd069e Mon Sep 17 00:00:00 2001 From: Nick Chambers Date: Mon, 28 Nov 2022 01:20:09 -0600 Subject: [PATCH] Interleave 2 strings together --- c/interleave.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 c/interleave.c diff --git a/c/interleave.c b/c/interleave.c new file mode 100644 index 0000000..9175df4 --- /dev/null +++ b/c/interleave.c @@ -0,0 +1,46 @@ +#include +#include +#include + +char *interleave(char *str1, size_t len1, char *str2, size_t len2) { + char *combined = malloc(len1 + len2 + 1); + + if(!combined) { + return NULL; + } + + char *idx = combined; + + while(*str1 && *str2) { + *idx = *str1, *(idx + 1) = *str2; + idx += 2, str1 += 1, str2 += 1; + } + + char *rest = str1; + + if(*str2) { + rest = str2; + } + + strcat(idx, rest); + return combined; +} + +int main(int argc, char **argv) { + if(argc != 3) { + return 1; + } + + size_t len1 = strlen(argv[1]); + size_t len2 = strlen(argv[2]); + + char *combined = interleave(argv[1], len1, argv[2], len2); + + if(!combined) { + return 1; + } + + printf("%s\n", combined); + free(combined); + return 0; +}