用c语言编写一个程序,使它具有:对串进行初始化,创建,求子串,删除插入子串集一体的操作,并且进行什么操作是由我们进行选择的,最好对主函数部分进行注释
时间: 2024-10-22 10:18:55 浏览: 43
在C语言中,我们可以创建一个简单的字符串管理程序,它包含一些基本的功能,如初始化、创建字符串、查找子串、插入和删除子串等。下面是一个示例代码,该程序通过`menu`函数引导用户进行操作:
```c
#include <stdio.h>
#include <string.h>
// 定义字符串结构体
typedef struct {
char* str;
int len; // 字符串长度
} String;
// 初始化字符串
String init_string(char* str) {
String s = {str, strlen(str)};
return s;
}
// 查找子串
int find_substring(String main_str, char* sub_str) {
int pos = -1;
for (int i = 0; i <= main_str.len - sub_str.len; i++) {
if (!strncmp(main_str.str + i, sub_str, strlen(sub_str))) {
pos = i;
break;
}
}
return pos;
}
// 插入子串
void insert_substring(String* main_str, char* insert_str, int position) {
char new_str[main_str->len + strlen(insert_str) + 1];
strncpy(new_str, main_str->str, position);
strcat(new_str, insert_str);
strcat(new_str, main_str->str + position);
free(main_str->str);
main_str->str = new_str;
main_str->len += strlen(insert_str);
}
// 删除子串
void delete_substring(String* main_str, char* sub_str) {
int start_pos = find_substring(*main_str, sub_str);
if (start_pos != -1) {
memmove(main_str->str + start_pos, main_str->str + start_pos + strlen(sub_str), main_str->len - start_pos - strlen(sub_str));
main_str->len -= strlen(sub_str);
}
}
// 主函数,用户交互菜单
void menu(String* str) {
while (1) {
printf("\n1. 初始化字符串\n2. 查找子串\n3. 插入子串\n4. 删除子串\n5. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
char input[100];
printf("请输入要初始化的字符串: ");
fgets(input, sizeof(input), stdin);
*str = init_string(input);
break;
case 2:
char search[100];
printf("输入要查找的子串: ");
fgets(search, sizeof(search), stdin);
int found = find_substring(*str, search);
if (found != -1)
printf("子串 %s 发现于位置 %d\n", search, found);
else
printf("未找到子串 %s.\n", search);
break;
case 3:
char insert[100];
printf("输入要插入的子串: ");
fgets(insert, sizeof(insert), stdin);
int insert_pos;
printf("插入位置: ");
scanf("%d", &insert_pos);
insert_substring(str, insert, insert_pos);
break;
case 4:
char del_str[100];
printf("输入要删除的子串: ");
fgets(del_str, sizeof(del_str), stdin);
delete_substring(str, del_str);
break;
case 5:
printf("程序结束.\n");
return;
default:
printf("无效的选择,请重新输入.\n");
}
}
}
int main() {
String my_str;
menu(&my_str); // 调用菜单函数
return 0;
}
```
阅读全文