我正在尝试构建一个函数,无论大小如何将两个字符串交织在一起(尽管可以假设它少于 100 个字符)并输出指向新字符串的指针。
char* interleaved(const char* s1, const char* s2){
char *word = malloc (sizeof (char) * 100);
const char *p = s1;
const char *p2 = s2;
int i = 0;
while(*p != '\0' || *p2 != '\0'){
if(i%2 == 0){
word[i] = *p;
p++;
}
if(i%2 == 1){
word[i] = *p2;
p2++;
}
i++;
}
if(*p == '\0'){
while(*p2 != '\0'){
word[i] = *p2;
p2++;
i++;
}
}
if(*p2 == '\0'){
while(*p != '\0'){
word[i] = *p;
p++;
i++;
}
}
word[i] = '\0';
return word;
}
目前,如果两个字符串的长度相同,它会起作用,例如“dog”和“cat”将产生“dcoagt”,但如果字符串不均匀,例如“dogbird”和“cat”,我会得到“dcoagtb”,并且如果第二个字符串更长,我就得到“dcoagt”。在原始 while 循环之后,我的两个 if 语句一定有问题,但我不确定是什么问题,有人可以看看并帮助我吗?
干杯
最佳答案
第一个循环应该使用 &&
而不是 ||
。
while(*p != '\0' && *p2 != '\0')
使用 &&
会导致它在任一字符串用完后立即停止。使用 ||
使其继续,直到两个 字符串都用完。这很糟糕,因为较短的字符串的指针会从末端直接跑到无人区。
关于c - 具有不同长度字符串的交错函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756566/