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语言代码实现字符串交替合并的效率?

相关推荐
春日见2 小时前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊2 小时前
”回调“高级
算法·青少年编程
云里雾里!2 小时前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
一只侯子5 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue5 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈5 小时前
Python数据结构
数据结构·算法·排序算法
J***79396 小时前
后端在分布式系统中的数据分片
算法·哈希算法
天真小巫6 小时前
2025.11.28总结
职场和发展
Dream it possible!7 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树中第 K 小的元素(86_230_C++_中等)
c++·leetcode·面试
sin_hielo7 小时前
leetcode 2872
数据结构·算法·leetcode