grimoire/c/interleave.c

47 lines
742 B
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}