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

相关推荐
A_nanda3 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
代码雕刻家4 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov4 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业6 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德6 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
diediedei6 小时前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI6 小时前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz12077 小时前
分治算法(c++)
c++·算法
睡一觉就好了。7 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
Tansmjs7 小时前
C++编译期数据结构
开发语言·c++·算法