c语言如何在字符串多个位置插入其他字符串
时间: 2024-10-21 22:10:37 浏览: 26
数据结构 字符串的插入删除 查找位置
在C语言中,要在字符串的一个或多处位置插入另一个字符串,可以采用数组拼接或者动态内存管理的方式。以下是两种常见的方法:
**1. 使用字符数组拼接**
```c
#include <stdio.h>
#include <string.h>
void insert_string(char *str, const char *insert, int position) {
// 获取原字符串长度
size_t len1 = strlen(str);
// 插入字符串的长度
size_t len2 = strlen(insert);
// 检查插入位置是否合法
if (position > len1 || position < 0)
return;
// 创建一个新的足够大的字符串缓冲区
char new_str[len1 + len2 + 1]; // 加1是为了容纳终止符'\0'
// 如果插入位置在起始,直接复制原字符串到新字符串
if (position == 0)
strncpy(new_str, str, len1);
else {
// 将原字符串部分复制到新字符串
strncpy(new_str, str, position - 1);
// 然后复制插入字符串
strcat(new_str, insert);
// 最后将剩余的部分复制过去
strcat(new_str, &str[position]);
}
// 终止符
new_str[len1 + len2] = '\0';
printf("Inserted string at position %d: %s\n", position, new_str);
}
int main() {
char original[] = "Hello, World!";
insert_string(original, "C ", 7); // 在逗号后面插入"C "
return 0;
}
```
**2. 动态内存管理(使用`realloc()`)**
对于较大的字符串或不确定大小的情况,可以使用`malloc()`和`realloc()`动态分配内存。注意这需要手动处理内存释放。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* insert_string(char* str, const char* insert, int position) {
size_t old_len = strlen(str);
size_t new_len = old_len + strlen(insert) + 1; // 包含插入字符串和空字符
// 检查内存是否需要扩大
char* new_str = realloc(str, new_len * sizeof(char));
if (!new_str) {
printf("Memory allocation failed.\n");
return NULL;
}
// 处理插入
if (position > old_len) { // 如果插入位置超出原字符串长度
memcpy(new_str + position, str, old_len);
str = new_str + position;
} else {
memmove(new_str + position + strlen(insert), str, old_len - position);
}
memcpy(new_str, insert, strlen(insert)); // 插入字符串
*(str + position) = '\0'; // 更新插入位置后的终止符
return new_str;
}
int main() {
char* original = malloc(15); // 假设我们知道字符串最大长度
strcpy(original, "Hello, World!");
original = insert_string(original, "C ", 7); // 同样在逗号后面插入
// 使用完成后记得释放内存: free(original);
return 0;
}
```
阅读全文