用C语言完成以下课题,并标注中文注释,课题内容: 设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组或字符指针实现字符串操作的功能。 课题要求: (1)编辑文本; (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。
时间: 2024-03-12 10:49:19 浏览: 82
好的,下面是用C语言实现简单文本编辑器的代码,已经添加了中文注释,希望对你有所帮助:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1000 // 定义字符串最大长度
void insert(char *str, int pos, char ch); // 插入字符函数
void delete(char *str, int pos); // 删除字符函数
int find(char *str, char *pattern); // 查找字符串函数
void replace(char *str, char *pattern, char *replacement); // 替换字符串函数
int main() {
char file_name[50]; // 存储文件名的字符数组
int choice, pos;
char ch, pattern[MAX_LEN], replacement[MAX_LEN], buffer[MAX_LEN];
FILE *fp;
printf("请输入要打开的文件名:");
scanf("%s", file_name);
fp = fopen(file_name, "r+"); // 打开指定文件
if (fp == NULL) { // 如果打开失败则提示并退出程序
printf("文件打开失败!");
exit(1);
}
while (1) { // 循环显示菜单,直到用户选择退出
printf("\n");
printf("1. 插入\n");
printf("2. 删除\n");
printf("3. 查找\n");
printf("4. 替换\n");
printf("5. 退出\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) { // 根据用户选择调用相应的函数
case 1:
printf("请输入要插入的位置和字符(用空格隔开):");
scanf("%d %c", &pos, &ch);
insert(buffer, pos, ch);
fputs(buffer, fp);
break;
case 2:
printf("请输入要删除的位置:");
scanf("%d", &pos);
delete(buffer, pos);
fputs(buffer, fp);
break;
case 3:
printf("请输入要查找的字符串:");
scanf("%s", pattern);
if (find(buffer, pattern) != -1) {
printf("找到了!");
} else {
printf("没找到!");
}
break;
case 4:
printf("请输入要替换的字符串和替换后的字符串(用空格隔开):");
scanf("%s %s", pattern, replacement);
replace(buffer, pattern, replacement);
fputs(buffer, fp);
break;
case 5:
fclose(fp); // 关闭文件
exit(0); // 退出程序
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
// 插入字符函数
void insert(char *str, int pos, char ch) {
int len = strlen(str);
if (pos < 0 || pos > len) { // 判断插入位置是否合法
printf("插入位置不合法!");
return;
}
for (int i = len; i >= pos; i--) { // 将插入位置后的字符向后移动一位
str[i + 1] = str[i];
}
str[pos] = ch; // 插入字符
}
// 删除字符函数
void delete(char *str, int pos) {
int len = strlen(str);
if (pos < 0 || pos >= len) { // 判断删除位置是否合法
printf("删除位置不合法!");
return;
}
for (int i = pos; i < len; i++) { // 将删除位置后的字符向前移动一位
str[i] = str[i + 1];
}
}
// 查找字符串函数
int find(char *str, char *pattern) {
char *p = strstr(str, pattern); // 在字符串中查找子串
if (p == NULL) { // 如果未找到则返回-1
return -1;
}
return p - str; // 返回子串在字符串中的位置
}
// 替换字符串函数
void replace(char *str, char *pattern, char *replacement) {
int pos = find(str, pattern);
if (pos == -1) { // 如果未找到则提示并返回
printf("未找到要替换的字符串!");
return;
}
int len1 = strlen(pattern);
int len2 = strlen(replacement);
if (len2 > len1) { // 如果替换后的字符串长度大于原字符串长度,则需要先将后面的字符向后移动
for (int i = strlen(str); i >= pos + len1; i--) {
str[i + len2 - len1] = str[i];
}
} else if (len2 < len1) { // 如果替换后的字符串长度小于原字符串长度,则需要先将后面的字符向前移动
for (int i = pos + len1; i <= strlen(str); i++) {
str[i - len1 + len2] = str[i];
}
}
for (int i = 0; i < len2; i++) { // 将替换后的字符串插入到原字符串中
str[pos + i] = replacement[i];
}
}
```
该程序使用了文件操作和字符串操作相关的函数,具备插入、删除、查找、替换等常规文本编辑功能,可以通过输入输出界面完成操作,方便用户对文本文件进行编辑。
阅读全文