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

相关推荐
小森776734 分钟前
(七)深度学习---神经网络原理与实现
人工智能·深度学习·神经网络·算法
迷茫不知归路1 小时前
操作系统实验习题解析 上篇
c++·算法·操作系统·实验课设
愚润求学1 小时前
【递归、搜索与回溯】专题一:递归(二)
c++·笔记·算法·leetcode
水水沝淼㵘2 小时前
嵌入式开发学习日志(数据结构--顺序结构单链表)Day19
linux·服务器·c语言·数据结构·学习·算法·排序算法
June`2 小时前
专题四:综合练习( 找出所有子集的异或总和再求和)
c++·算法·深度优先·剪枝
Magnum Lehar2 小时前
3d游戏引擎的Utilities模块实现下
c++·算法·游戏引擎
JANYI20183 小时前
C语言易混淆知识点详解
java·c语言·算法
绒绒毛毛雨3 小时前
广告推荐算法入门 day1 --项目选型
算法·推荐算法
天真小巫4 小时前
2025.5.13总结
职场和发展
越城4 小时前
数据结构中的栈与队列:原理、实现与应用
c语言·数据结构·算法