leetcode刷题记录(C语言)

给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。
如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。

输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1:  a   b   c
word2:    p   q   r
合并后:  a p b q c r

char * mergeAlternately(char * word1, char * word2){
    int len1=strlen(word1),len2=strlen(word2),i=0,j=0;
    char *word=(char *)malloc(sizeof(char)*(len1+len2+1));
    while(i<len1||i<len2){
        i<len1?(word[j++]=word1[i]):0;
        i<len2?(word[j++]=word2[i]):0;
        i++;
    }
    word[j]='\0';
    return word;
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * mergeAlternately(char * word1, char * word2){
    int chlen1 = strlen(word1);
    int chlen2 = strlen(word2);
    int temp = 0, flag1 = 0, flag2 = 0;
    char *word = (char*)calloc((chlen1 + chlen2 + 1), sizeof(char));
    while ((flag1 < chlen1) && (flag2 < chlen2)) {
        word[temp++] = word1[flag1++];
        word[temp++] = word2[flag2++];
    }
    while (flag1 < chlen1) {
        word[temp++] = word1[flag1++];
    }
    while (flag2 < chlen2) {
        word[temp++] = word2[flag2++];
    }
    word[chlen1 + chlen2] = '\0';
    return word;
}
如果使用malloc动态分配内存,使用strcat(word1, word2),因为malloc分配的内存没有初始化,多出来的字母追加到合并后字符串的末尾的时候,就会导致内存溢出而出错
posted @ 2023-07-15 10:53  稻草人拾荒  阅读(39)  评论(0)    收藏  举报