用C语言完成以下课题,并标注中文注释:课题内容: 设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组或字符指针实现字符串操作的功能。 课题要求: (1)编辑文本; (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。
时间: 2024-03-12 19:49:45 浏览: 74
基于C语言的文本编辑器-部分编辑功能模块和显示功能模块-毕业论文
好的,下面是一份简单的文本编辑器的源代码,带有中文注释。请注意,这只是一个示例,您可以根据自己的需求进行修改和扩展。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_COUNT 1000 // 最大行数
#define MAX_LINE_LENGTH 1000 // 最大行长度
char lines[MAX_LINE_COUNT][MAX_LINE_LENGTH]; // 存储每一行内容的字符数组
int line_count = 0; // 行数
// 打开指定位置的文本文件
int open_file() {
char filename[100];
printf("请输入文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "r"); // 打开文件,以只读方式读取
if (fp == NULL) {
printf("文件打开失败!\n");
return -1;
}
// 读取文件内容
char line[MAX_LINE_LENGTH];
while (fgets(line, sizeof(line), fp) != NULL && line_count < MAX_LINE_COUNT) {
strcpy(lines[line_count++], line);
}
fclose(fp); // 关闭文件
printf("文件打开成功!共读取到%d行内容。\n", line_count);
return 0;
}
// 编辑文本
void edit_text() {
int choice;
printf("请选择你要进行的操作:\n");
printf("1. 插入一行\n");
printf("2. 删除一行\n");
printf("3. 查找和替换\n");
printf("4. 返回主菜单\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1: {
int n;
printf("请输入要插入的行号:");
scanf("%d", &n);
if (n < 1 || n > line_count + 1) {
printf("无效行号!\n");
break;
}
char new_line[MAX_LINE_LENGTH];
printf("请输入要插入的内容:");
getchar(); // 读取上一个输入操作留下的回车符
fgets(new_line, sizeof(new_line), stdin); // 从标准输入中读取一行内容
// 将新行插入到第n行后面
for (int i = line_count; i >= n; i--) {
strcpy(lines[i], lines[i - 1]);
}
strcpy(lines[n - 1], new_line);
line_count++;
printf("插入成功!\n");
break;
}
case 2: {
int n;
printf("请输入要删除的行号:");
scanf("%d", &n);
if (n < 1 || n > line_count) {
printf("无效行号!\n");
break;
}
// 将第n行后面的所有行向前移动
for (int i = n; i < line_count; i++) {
strcpy(lines[i - 1], lines[i]);
}
line_count--;
printf("删除成功!\n");
break;
}
case 3: {
char old_str[MAX_LINE_LENGTH], new_str[MAX_LINE_LENGTH];
printf("请输入要查找的内容:");
getchar(); // 读取上一个输入操作留下的回车符
fgets(old_str, sizeof(old_str), stdin); // 从标准输入中读取一行内容
printf("请输入要替换成的内容:");
fgets(new_str, sizeof(new_str), stdin); // 从标准输入中读取一行内容
// 查找和替换
for (int i = 0; i < line_count; i++) {
char *p = lines[i];
while ((p = strstr(p, old_str)) != NULL) {
char tmp[MAX_LINE_LENGTH];
sprintf(tmp, "%.*s%s%s", (int)(p - lines[i]), lines[i], new_str, p + strlen(old_str));
strcpy(lines[i], tmp);
p = lines[i] + (int)(strlen(tmp) - strlen(p));
}
}
printf("替换成功!\n");
break;
}
case 4:
return;
default:
printf("无效选项!\n");
break;
}
}
// 保存并退出
int save_and_exit() {
char filename[100];
printf("请输入要保存的文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "w"); // 打开文件,以只写方式写入
if (fp == NULL) {
printf("文件打开失败!\n");
return -1;
}
// 将所有行内容写入文件中
for (int i = 0; i < line_count; i++) {
fprintf(fp, "%s", lines[i]);
}
fclose(fp); // 关闭文件
printf("文件保存成功!\n");
exit(0); // 退出程序
}
// 主函数
int main() {
printf("欢迎使用简单文本编辑器!\n");
while (1) {
printf("1. 打开文件\n");
printf("2. 编辑文本\n");
printf("3. 保存并退出\n");
printf("请输入选项:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
if (open_file() != 0) {
break;
}
printf("文件内容如下:\n");
for (int i = 0; i < line_count; i++) {
printf("%d. %s", i + 1, lines[i]);
}
break;
case 2:
edit_text();
break;
case 3:
save_and_exit();
break;
default:
printf("无效选项!\n");
break;
}
}
return 0;
}
```
希望这份代码可以帮助您完成课题要求。如果您有任何问题,请随时问我!
阅读全文