C语言实现str1定长前缀插入str2的string_pre函数求助
C语言
string_pre函数实现方案 核心实现逻辑
- 首先通过
strlen获取两个输入字符串的原始长度,提前保存str1的原始长度,避免后续修改字符串内容导致长度计算错误 - 分两个分支处理:
- 当str2长度小于等于str1长度时:先将原str1需要保留的前
(原str1长度 - str2长度)个字符移动到str1偏移str2长度的位置,再将完整str2拷贝到str1起始位置,手动补充字符串结束符\0,返回1 - 当str2长度大于str1长度时:直接拷贝str2的前
原str1长度个字符到str1,手动补充字符串结束符\0,返回0
- 当str2长度小于等于str1长度时:先将原str1需要保留的前
注意:移动原str1保留片段时使用
memmove处理内存重叠场景,避免拷贝内容出错;所有操作完成后必须手动在str1末尾补\0,保证字符串格式合法,长度与原str1一致。
完整可运行代码
#include <stdio.h> #include <string.h> int string_pre(char *str1, char *str2) { int sizeStr1 = strlen(str1); int sizeStr2 = strlen(str2); int ret; if (sizeStr2 <= sizeStr1) { int keep_len = sizeStr1 - sizeStr2; // 先移动原str1需要保留的片段,避免被str2覆盖 memmove(str1 + sizeStr2, str1, keep_len); // 拷贝str2到str1头部 memcpy(str1, str2, sizeStr2); ret = 1; } else { // str2更长,仅拷贝前sizeStr1个字符 memcpy(str1, str2, sizeStr1); ret = 0; } // 固定str1长度,补字符串结束符 str1[sizeStr1] = '\0'; return ret; } int main() { // 测试示例1 char str1_1[] = "abcdefgh"; char str2_1[] = "xyz"; int res1 = string_pre(str1_1, str2_1); printf("示例1结果:str1 = %s, 返回值 = %d\n", str1_1, res1); // 测试示例2 char str1_2[] = "abcd"; char str2_2[] = "efghj"; int res2 = string_pre(str1_2, str2_2); printf("示例2结果:str1 = %s, 返回值 = %d\n", str1_2, res2); return 0; }
运行结果验证
- 示例1输出:
示例1结果:str1 = xyzabcde, 返回值 = 1,符合需求 - 示例2输出:
示例2结果:str1 = efgh, 返回值 = 0,符合需求
代码说明:去掉了原代码中冗余的stdlib.h头文件引用,公共的结束符赋值逻辑抽到分支外,减少重复代码。
内容的提问来源于stack exchange,提问作者Lala
相关产品推荐
相关产品推荐

