用c语言编写一个程序,使它具有:对串进行初始化,创建,求子串,删除插入子串集一体的操作
时间: 2024-10-22 15:18:38 浏览: 27
C语言求两个字符串的最长公共子串
5星 · 资源好评率100%
在C语言中,你可以创建一个结构体来表示字符串,并编写一系列函数来实现所需的功能。下面是一个简单的示例,包括初始化、创建、查找子串以及操作子串集:
```c
#include <stdio.h>
#include <string.h>
// 定义一个字符串结构体
typedef struct {
char* str; // 字符串内容
int len; // 字符串长度
} String;
// 初始化一个新的字符串
String* create_string(char* input) {
String* new_str = (String*)malloc(sizeof(String));
if (new_str == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
new_str->str = (char*)malloc(strlen(input) + 1); // 加1为了存储'\0'
strcpy(new_str->str, input);
new_str->len = strlen(input);
return new_str;
}
// 检查子串是否存在
int has_substring(String* main_str, String* substr) {
if (substr->len > main_str->len) {
return 0;
}
for (int i = 0; i <= main_str->len - substr->len; i++) {
if (strncmp(main_str->str + i, substr->str, substr->len) == 0) {
return 1;
}
}
return 0;
}
// 查找并删除子串
void delete_substring(String** main_str, String* substr) {
if (!has_substring(*main_str, substr)) {
printf("Substring not found in the main string.\n");
return;
}
int start = find_substring_start(*main_str, substr);
memmove(*main_str->str + start, *main_str->str + start + substr->len,
(main_str->len - start - substr->len) * sizeof(char));
(*main_str)->len -= substr->len;
if (*main_str->str[(*main_str)->len] == '\0') {
free(*main_str->str);
*main_str->str = NULL;
} else {
*main_str->str[(*main_str)->len] = '\0';
}
}
// 插入子串到字符串中
void insert_substring(String** main_str, String* insert_str, int pos) {
if (pos < 0 || pos >= (*main_str)->len) {
printf("Invalid insertion position.\n");
return;
}
String* temp = (String*)malloc(sizeof(String));
if (temp == NULL) {
printf("Memory allocation failed.\n");
return;
}
temp->str = (char*)malloc(strlen(insert_str->str) + (*main_str)->len + 1);
if (temp->str == NULL) {
printf("Memory allocation failed.\n");
free(temp);
return;
}
memcpy(temp->str, (*main_str)->str, pos * sizeof(char));
memcpy(temp->str + pos, insert_str->str, insert_str->len * sizeof(char));
memcpy(temp->str + pos + insert_str->len, (*main_str)->str + pos,
((*main_str)->len - pos) * sizeof(char));
temp->len = (*main_str)->len + insert_str->len;
if ((*main_str)->str) {
free(*main_str->str);
}
*main_str = temp;
}
// 打印字符串和相关操作
void print_string_and_operations(String* str) {
printf("Main string: %s\n", str->str);
if (str) {
printf("Operations:\n");
// ... 实现其他操作后在这里打印结果
}
}
int main() {
String* main_str = create_string("Hello, C!");
print_string_and_operations(main_str);
// 示例操作:检查"Hello"是否存在于主字符串中
String sub_str = {"Hello"};
if (has_substring(main_str, &sub_str)) {
printf("Substring 'Hello' found.\n");
}
// 删除子串"Hello"
delete_substring(&main_str, &sub_str);
// 插入子串"C++"到索引2的位置
String insert_str = {"C++"};
insert_substring(&main_str, &insert_str, 2);
print_string_and_operations(main_str);
free(main_str);
return 0;
}
```
在这个示例中,我们首先创建了一个`String`结构体,然后实现了初始化、子串搜索、删除子串和插入子串的函数。在`main`函数中展示了如何使用这些功能。
阅读全文