设计并实现字符串的子字符串插入算法。给出c语言代码
时间: 2024-12-19 21:27:02 浏览: 5
设计一个插入字符串的子字符串到另一个字符串中的算法,我们可以创建一个新的字符串,将原字符串的一部分复制,然后添加目标子字符串,最后返回新的结果。以下是使用C语言实现的一个简单示例:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
char* insert_substring(char* str1, char* substr, int start_pos);
// 插入函数的实现
char* insert_substring(char* str1, char* substr, int start_pos) {
// 检查输入是否为空
if (str1 == NULL || substr == NULL) {
printf("Invalid input.\n");
return NULL;
}
// 获取原始字符串和子字符串的长度
int len1 = strlen(str1);
int len2 = strlen(substr);
// 如果起始位置超出范围,则返回原始字符串
if (start_pos < 0 || start_pos > len1) {
printf("Start position is out of range.\n");
return str1;
}
// 创建一个新的字符串,其大小等于原始字符串加上子字符串长度加1(用于终止符)
char* new_str = malloc(len1 + len2 + 1);
if (new_str == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
// 将原始字符串前部分复制到新字符串
strncpy(new_str, str1, start_pos);
// 添加子字符串
memcpy(new_str + start_pos, substr, len2);
// 结束位置并添加终止符
new_str[len1 + start_pos] = '\0';
// 返回新字符串
return new_str;
}
int main() {
char str1[] = "Hello, World!";
char substr[] = "CSDN";
int start_pos = 7;
char* result = insert_substring(str1, substr, start_pos);
if (result != NULL) {
printf("Inserted string: %s\n", result);
free(result); // 释放内存
}
return 0;
}
```
在这个例子中,如果输入合法,它会在`Hello, World!`的第8个字符位置插入"CSDN",生成新的字符串"Hello, CSDN!"。
阅读全文