用C语言实现字符串数据结构,把一个串插入另外一个字符串中,考虑插入后的三种情况,程序尽可能增加可读性,比如1)输入字符串长度、输入字符串的元素、输入插入新的字符串当前字符串的所有元素等。代码情绪,运行结果正确、可读性好
时间: 2024-10-16 21:05:16 浏览: 18
在C语言中,我们可以使用数组和动态内存分配来实现自定义字符串数据结构,同时提供插入功能。下面是一个简单的例子,演示如何将一个新字符串插入到另一个字符串中,并处理插入前、插入后以及插入超出范围的情况:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义字符串结构体
typedef struct {
char* data;
int length;
} String;
// 创建一个新的字符串
String create_string(char* str) {
int len = strlen(str);
String new_str;
new_str.data = (char*)malloc(len + 1); // 分配空间并复制字符串
strcpy(new_str.data, str);
new_str.length = len;
return new_str;
}
// 插入新字符串到原字符串
void insert_string(String* target, const char* insert_str, int position) {
if (target == NULL || insert_str == NULL) {
printf("Invalid input.\n");
return;
}
int insert_len = strlen(insert_str);
int total_len = target->length + insert_len;
// 检查是否需要扩大目标字符串
if (total_len > target->length) {
target->data = realloc(target->data, total_len + 1); // 扩大空间
if (target->data == NULL) {
printf("Memory allocation failed.\n");
return;
}
target->length = total_len; // 更新长度
}
// 将插入字符串复制到目标字符串
memmove(&target->data[position + insert_len], &target->data[position], target->length - position);
memcpy(target->data + position, insert_str, insert_len);
printf("Inserted '%s' at position %d in the target string '%.*s'\n", insert_str, position, target->length, target->data);
}
// 清理字符串资源
void free_string(String* str) {
if (str != NULL && str->data != NULL) {
free(str->data);
str->data = NULL;
str->length = 0;
}
}
int main() {
String original_str = create_string("Hello, ");
String insert_str = create_string("World!");
// 插入示例1:正常插入
insert_string(&original_str, insert_str.data, 7);
// 插入示例2:插入到末尾
insert_string(&original_str, "", 0);
// 插入示例3:尝试插入超出范围
insert_string(&original_str, "!", -1); // 这会打印错误信息
free_string(&original_str);
free_string(&insert_str);
return 0;
}
```
这个程序首先创建了一个`String`结构体用于表示字符串,然后实现了创建、插入和释放字符串的功能。在`main`函数中展示了三个插入示例。注意,由于C语言的动态内存管理,务必在使用完字符串后清理内存。
阅读全文