LeetCode 1768 交替合并字符串

用 C 语言实现字符串交替合并功能

一、问题阐述

我们给定了两个字符串,分别记为 word1word2。要求从 word1 开始,以交替添加字母的方式来合并这两个字符串。也就是说,先取 word1 的第一个字符,再取 word2 的第一个字符,接着再取 word1 的第二个字符,如此循环下去。要是其中一个字符串比另一个字符串长,那么就把长的那个字符串剩余的字符,全部追加到合并后字符串的末尾。最终,我们需要返回这个合并后的字符串。

二、代码实现及解析

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* mergeAlternately(char* word1, char* word2) {
    int len1 = strlen(word1);  // 获取word1字符串的长度
    int len2 = strlen(word2);  // 获取word2字符串的长度
    int totalLen = len1 + len2;  // 计算合并后字符串大致的总长度
    char* result = (char*)malloc((totalLen + 1) * sizeof(char));  // 为合并后的字符串分配足够空间,多分配1个字节用于存放字符串结束符'\0'
    int i, j, k;
    i = j = k = 0;
    // 交替从word1和word2中取字符放入result
    while (i < len1 && j < len2) {
        result[k++] = word1[i++];
        result[k++] = word2[j++];
    }
    // 处理word1剩余的字符(如果有)
    while (i < len1) {  
        result[k++] = word1[i++];
    }
    // 处理word2剩余的字符(如果有)
    while (j < len2) {  
        result[k++] = word2[j++];
    }
    result[k] = '\0';  // 添加字符串结束标志
    return result;
}
int main() {
    char word1[] = "abc";
    char word2[] = "pqr";
    char* merged = mergeAlternately(word1, word2);
    printf("%s\n", merged);
    free(merged);  // 释放动态分配的内存
    return 0;
}

(一)获取字符串长度及分配内存

cs 复制代码
int len1 = strlen(word1);  
int len2 = strlen(word2);  
int totalLen = len1 + len2;  
char* result = (char*)malloc((totalLen + 1) * sizeof(char));

首先,通过 strlen 函数分别获取 word1word2 这两个输入字符串的长度,将其存储在 len1len2 变量中。然后,计算出合并后字符串的大致总长度 totalLen,也就是两个字符串长度之和。接着,使用 malloc 函数为合并后的字符串动态分配内存空间,之所以要乘以 sizeof(char),是因为 malloc 函数按字节分配内存,而 char 类型占一个字节,并且多分配了 1 个字节,目的是为了存放字符串结束符 '\0',这样才能构成一个合法的 C 语言字符串。

(二)交替合并字符串核心循环

cs 复制代码
while (i < len1 && j < len2) {
    result[k++] = word1[i++];
    result[k++] = word2[j++];
}

这里是实现交替合并字符串的关键部分。通过一个 while 循环,只要 word1word2 这两个字符串当前都还有未处理的字符(即 i < len1j < len2),就先从 word1 中取出一个字符存放到 result 中,然后再从 word2 中取出一个字符存放到 result 中,并且相应地更新用于遍历 word1word2result 的索引变量 ijk

(三)处理剩余字符

cs 复制代码
while (i < len1) {  
    result[k++] = word1[i++];
}
while (j < len2) {  
    result[k++] = word2[j++];
}

在前面的交替合并循环结束后,有可能 word1 或者 word2 还有剩余的字符没有被合并进去。所以,通过这两个 while 循环分别处理它们剩余的字符。如果 word1 还有剩余字符(即 i < len1),就把剩余字符依次追加到 result 字符串后面;同理,如果 word2 还有剩余字符(即 j < len2),也将其依次追加到 result 后面。

(四)添加字符串结束符并返回结果

cs 复制代码
result[k] = '\0';  
return result;

最后,在合并后的字符串 result 的末尾添加字符串结束符 '\0',使其成为一个符合 C 语言规范的字符串,然后返回这个指向合并后字符串的指针 result,这样调用函数的地方就能获取到合并后的字符串了。

三、总结

通过这个简单的字符串交替合并的例子,我们可以看到 C 语言在处理字符串操作时,需要仔细地考虑内存的分配、字符串的遍历以及结束符的处理等诸多细节。虽然相比一些高级语言,C 语言的字符串操作显得略微繁琐,但这也恰恰体现了它对底层操作的高度可控性。掌握这样的基础操作,对于我们深入理解 C 语言以及后续进行更复杂的字符串相关编程任务都有着重要的意义。

希望这篇博客能够帮助大家更好地理解和掌握在 C 语言中如何实现字符串的交替合并功能,要是你有任何疑问或者其他想法,欢迎在评论区留言交流哦!

提供几个C语言示例代码来交替合并字符串写一篇关于字符串操作的C语言博客如何优化C语言代码实现字符串交替合并的效率?

相关推荐
学编程的小程3 小时前
LeetCode216
算法·深度优先
leeyayai_xixihah3 小时前
2.21力扣-回溯组合
算法·leetcode·职场和发展
01_3 小时前
力扣hot100——相交,回文链表
算法·leetcode·链表·双指针
萌の鱼3 小时前
leetcode 2826. 将三个组排序
数据结构·c++·算法·leetcode
Buling_03 小时前
算法-哈希表篇08-四数之和
数据结构·算法·散列表
AllowM3 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
RAN_PAND4 小时前
STL介绍1:vector、pair、string、queue、map
开发语言·c++·算法
fai厅的秃头姐!6 小时前
C语言03
c语言·数据结构·算法
lisanndesu6 小时前
动态规划
算法·动态规划
myprogramc6 小时前
十大排序算法
数据结构·算法·排序算法