数据结构中运用C语言写一段代码,要求在源字符串的第i个字符之前插入目标字符串,其中pSrc为源字符串,pos为插入位置,从1开始计数,pDest为目标字符串,用if,while语句写出,如果插入成功返回插入位置,插入失败返回0
时间: 2024-11-09 12:23:11 浏览: 21
在C语言中,你可以通过动态内存分配和指针操作来实现这个功能。下面是一个简单的示例代码,它会在源字符串的指定位置`pos`前插入目标字符串:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int insert_string(char **pSrc, int pos, char *pDest) {
// 获取源字符串长度
size_t src_len = strlen(*pSrc);
// 如果插入位置大于源字符串长度,直接返回0表示插入失败
if (pos > src_len) {
return 0;
}
// 动态分配空间存储目标字符串和新的源字符串
char* new_src = malloc((src_len + strlen(pDest) + 1) * sizeof(char));
if (new_src == NULL) {
printf("Memory allocation failed.\n");
return 0;
}
// 将目标字符串复制到新字符串的开始部分
strcpy(new_src, pDest);
// 将源字符串的一部分复制到新字符串的新位置
memmove(&new_src[strlen(pDest)], *pSrc, src_len - pos + 1); // 移动源字符串的部分内容
// 将目标字符串添加到源字符串的指定位置
memcpy(new_src, pDest, strlen(pDest)); // 插入目标字符串
// 更新源字符串指针指向新的字符串
*pSrc = new_src;
// 返回插入后的字符串长度作为新的位置
return src_len; // 注意这里返回的是整个新字符串的长度,不是插入位置哦
}
// 示例用法
int main() {
char *src = "Hello, ";
int pos = 7;
char *dest = "World!";
int inserted_pos = insert_string(&src, pos, dest);
if (inserted_pos > 0) {
printf("Inserted '%s' at position %d, resulting in: '%s'\n", dest, inserted_pos, src);
} else {
printf("Insertion failed.\n");
}
free(src); // 释放动态分配的内存
return 0;
}
```
阅读全文