用c语言编写一个程序,使它具有:对串进行初始化,创建,求子串长度,删除插入子串集一体的操作,并且进行什么操作是由我们进行选择的,最好对主函数部分进行注释
时间: 2024-10-22 21:18:53 浏览: 51
在 C 语言中,我们可以创建一个简单的字符串处理程序,其中包括初始化、创建、查找子串长度、删除和插入子串等功能。下面是一个简单的示例,其中使用了 `stdio.h` 和 `string.h` 来处理字符串。主函数部分已经添加了相应的注释。
```c
#include <stdio.h>
#include <string.h>
// 定义字符串结构体,方便存储数据
typedef struct {
char *str;
int length;
} String;
// 初始化字符串
void init_string(String *s, const char *input) {
s->str = (char*)malloc(strlen(input) + 1); // 分配内存并复制输入字符串
strcpy(s->str, input);
s->length = strlen(input);
}
// 创建一个新的字符串
String create_string(const char *input) {
String new_str;
init_string(&new_str, input);
return new_str;
}
// 求子串长度
int get_substring_length(String str, const char *substring) {
return strlen(str.str) - strlen(str.str + strstr(str.str, substring));
}
// 删除子串
void delete_substring(String *str, const char *substring) {
char* temp = strstr(str->str, substring);
if (temp != NULL) {
memmove(temp, temp + strlen(substring), strlen(str->str) - temp + 1); // 移动字符
str->length -= strlen(substring);
}
}
// 插入子串
void insert_substring(String *str, const char *substring, int index) {
if (index > 0 && index <= str->length) { // 确保插入位置合法
memmove(str->str + index, str->str + index + strlen(substring), str->length - index + 1); // 移动后续字符
strcat(str->str, substring); // 插入新子串
str->length += strlen(substring);
} else {
printf("Invalid insertion index.\n");
}
}
// 主函数,用户选择操作
int main() {
// 1. 用户输入初始字符串
char input[100];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = '\0'; // 清除换行符
// 2. 初始化字符串
String myStr = create_string(input);
while (1) {
int choice;
printf("\nChoose an operation:\n1. Initialize\n2. Create from input\n3. Get substring length\n4. Delete substring\n5. Insert substring\n6. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Current string: %s\n", myStr.str);
break;
case 2:
String newStr = create_string(input);
printf("New string created: %s\n", newStr.str);
free(newStr.str);
break;
case 3:
char substr[100];
printf("Enter substring to find: ");
scanf("%s", substr);
int len = get_substring_length(myStr, substr);
printf("Substring length: %d\n", len);
break;
case 4:
char delSubstr[100];
printf("Enter substring to delete: ");
scanf("%s", delSubstr);
delete_substring(&myStr, delSubstr);
printf("Updated string: %s\n", myStr.str);
break;
case 5:
char insertStr[100];
int idx;
printf("Enter substring to insert and index: ");
scanf("%s%d", insertStr, &idx);
insert_substring(&myStr, insertStr, idx);
printf("Updated string: %s\n", myStr.str);
break;
case 6:
printf("Exiting...\n");
free(myStr.str);
return 0;
default:
printf("Invalid choice. Try again.\n");
}
}
return 0; // 这里永远不会到达,只是为了语法完整
}
```
在这个程序中,用户可以根据提示选择不同的操作来处理字符串。记得在退出前释放分配的内存资源。
阅读全文