#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <math.h>
#define LEFT 0x4b00 /*←:光标左移*/
#define RIGHT 0x4d00 /*→:光标右移*/
#define DOWN 0x5000 /*↓键:光标下移*/
#define UP 0x4800 /*↑键:光标上移*/
#define ESC 0x011b /*ESC键:取消菜单打开操作*/
#define ENTER 0x1c0d /*回车键:换行*/
#define DEL 21248 /*DEL键:删除当前字符*/
#define BACK 3592 /*BackSpace键:删除当前光标位置前一个字符*/
#define CL 29440 /*ctrl+←键:从右至左,选定文本*/
#define CR 29696 /*ctrl+→键:从左到右,选定文本*/
#define Cc 11779 /*ctrl+c键:将选定文本,复制一份到剪贴板中*/
#define Cv 12054 /*ctrl+v键:将剪贴板中的内容复制到当前位置*/
#define Cx 11544 /*ctrl+x键:对选定文本,执行剪切操作*/
#define F1 15104 /*F1键:打开文件菜单*/
#define F2 15360 /*F2键:打开编辑菜单*/
#define F3 15616 /*F3键:打开帮助菜单*/
#define F10 17408 /*F10键:进入文本快速预览模式*/
int value, backup, NUM;
/*value保存有值数组元素的最大下标值,backup保存value的副本,NUM保存当前行中的用户输入的字符个数*/
typedef struct record
{
char ch; /*保存一字符*/
int col, line; /*x轴和y轴坐标*/
} record;
record r[500]; /*定义一个有500个元素的结构体数组,保存选定的文本字符的属性*/
typedef struct node /*定义保存行中的单个字符的结构*/
{
char ch; /*数据域:保存一字符*/
struct node *next; /*指针域:指向下一个结点的指针*/
} node; /*由此类型节点构成的单链表,命名为:列单链表*/
typedef struct Hnode /*定义保存所有列单链表首节点的指针的结构*/
{
node *next; /*指向列单链表的首节点的地址*/
struct Hnode *nextl; /*指向下一个节点的指针*/
} Hnode; /*由此类型节点构成的单链表,命名为:行单链表*/
void drawmain() /*画主窗口函数*/
{
int i, j;
gotoxy(1, 1); /*在文本窗口中设置光标至(1,1)处*/
textbackground(7); /*选择新的文本背景颜色,7为LIGHTGRAY淡灰色*/
textcolor(0); /*在文本模式中选择新的字符颜色0为BLACK黑*/
insline(); /*在文本窗口的(1,1)位置处中插入一个空行*/
for (i = 1; i <= 24; i++)
{
gotoxy(1, 1 + i); /*(x,y)中x不变,y++*/
cprintf("%c", 196); /*在窗口左边输出-,即画出主窗口的左边界 */
gotoxy(80, 1 + i);
cprintf("%c", 196); /*在窗口右边,输出-,即画出主窗口的右边界*/
}
for (i = 1; i <= 79; i++)
{
gotoxy(1 + i, 2); /*在第2行,第2列开始*/
cprintf("%c", 196); /*在窗口顶端,输出-*/
gotoxy(1 + i, 25); /*在第25行,第2列开始*/
cprintf("%c", 196); /*在窗口底端,输出-*/
}
gotoxy(1, 1);
cprintf("%c", 196); /*在窗口左上角,输出-*/
gotoxy(1, 24);
cprintf("%c", 196); /*在窗口左下角,输出-*/
gotoxy(80, 1);
cprintf("%c", 196); /*在窗口右上角,输出-*/
gotoxy(80, 24);
cprintf("%c", 196); /*在窗口右下角,输出-*/
gotoxy(7, 1);
cprintf("%c %c File %c %c", 179, 17, 16, 179); /* | < > |*/
gotoxy(27, 1);
cprintf("%c %c Edit %c %c", 179, 17, 16, 179); /* | < > |*/
gotoxy(47, 1);
cprintf("%c %c Help %c %c", 179, 17, 16, 179); /* | < > |*/
gotoxy(5, 25); /*跳至窗口底端*/
textcolor(1);
cprintf(" Row:1 Col:1");
gotoxy(68, 25);
cprintf("Version 2.0");
}
void qview(Hnode *q) /*快速预览文本:开头:#,回车:* */
{
void view(Hnode * q); /*view()函数声明*/
node *p;
int i;
window(1, 1, 80, 25); /*定义文本窗口大小*/
clrscr(); /*清屏*/
/*循环读取两个单链表中的值:q是一个指向行单链表首节点的指针,
此单链表数据域的值为实际保存各行字符的列单链表p中的首节点地址*/
do
{
p = q->next; /*p指向保存行数据的列单链表的首节点的地址*/
cprintf("#"); /*每行开头,打印此字符,不管前面是否有回车符*/
while (p != NULL) /*循环读取单链表p中的值*/
{
if (p->ch == 13)
putch('*'); /*若为回车键,打印出*号*/
else
putch(p->ch); /*输出各行中的字符到预览窗口*/
p = p->next; /*指向下一个节点*/
}
q = q->nextl; /*指向下一个节点*/
printf("\n"); /*输出一个回车*/
} while (q != NULL);
getch();
clrscr();
drawmain(); /*按任意键后,回到主窗口界面*/
window(2, 2, 79, 23);
textbackground(9);
for (i = 0; i < 24; i++)
insline(); /*插入24个空行*/
window(3, 3, 78, 23);
textcolor(10);
}
void view(Hnode *q) /*按行显示保存在单链表中的文本字符,q为指向行单链表中第一个节点的指针*/
{
node *p; /*p为保存列单链表节点元素地址的指针*/
clrscr(); /*清屏*/
/*双重循环,读取并显示保存在单链表中字符*/
do
{
p = q->next;
while (p != NULL && p->ch >= 32 && p->ch < 127 && p->ch != 13 && p->ch != -1) /*指针p不能为空,且数据域必须为常规字符*/
{
putch(p->ch); /*在文本窗口中输出该字符*/
p = p->next; /*指向下一个节点*/
}
q = q->nextl; /*指向下一个节点*/
if ((p->ch == 13 || p->ch == -1) && q != NULL)
gotoxy(1, wherey() + 1); /*若ch为回车或EOF标记,光标跳至下行的开始处*/
} while (q != NULL); /*逐行逐列显示文本字符*/
}
int check(Hnode *Hhead, int m, int n) /*check():在单链表中检查第m行第n列位置的字符,若为常规字符,则返回该字符*/
{
int i;
Hnode *q;
node *p;
q = Hhead;
for (i = 1; i < m; i++) /*定位至行单链表中的第m个元素*/
q = q->nextl;
p = q->next; /*获取第m个节点的数据域*/
for (i = 1; i < n; i++) /*定位至列单链表中的第n个元素*/
p = p->next;
if (p->ch == 13)
return -1; /*若第m行,第n列的字符为回车键,则返回-1*/
if (p->ch >= 32 && p->ch < 127)
return p->ch; /*若第m行,第n列的字符为常规字符,则返回该字符*/
else
return 0; /*若第m行,第n列的字符既非回车符又非常规字符,则返回0*/
}
int judge(Hnode *Hhead, int m) /*judge():返回第m行中的常规字符总的个数,不包括回车符*/
{
Hnode *q;
node *p;
int i, num = 0;
q = Hhead;
for (i = 1; i < m; i++) /*定位至行单链表中的第m个元素*/
q = q->nextl;
if (q == NULL)
return -1; /*返回-1,表示第m行不存在*/
p = q->next;
while (p->next != NULL)
{
p = p->next;
num++; /*统计第m行的字符个数*/
}
/*行尾字符还没有判断,接下来判断行尾字符*/
if (p->ch == 13 && num == 0)
return 0; /*返回0,表示当前行只有一个回车字符*/
if (p->ch >= 32 && p->ch < 127)
return num + 1; /*返回num+1,表示当前行的最后一个字符为常规字符*/
if (p->ch == 13 && num != 0)
return num; /*返回num,表示当前行的最后一个字符为回车符,不计算在内*/
else
return 1; /*返回num,表示当前行中只有一个字符,且没有回车符*/
}
int del(Hnode *Hhead, int m, int n) /*del():删除第m行,第n列位置的字符*/
{
Hnode *q, *q1;
node *p1, *p2, *tail;
int i, num = 0, j, flag = 0;
q = Hhead;
if (n == 0 && m == 1)
return; /*第1行,第0列不存在*/
if (n == 0 && m > 1) /*若为第0列字符,但行必须大于1,执行向上行移处理*/
{
n = 76;
m = m - 1;
gotoxy(n, m); /*移至第m-1行,第76列*/
flag = 1; /*移位的标志置1*/
}
for (i = 1; i < m; i++) /*定位至行单链表中的第m个元素*/
q = q->nextl;
p1 = q->next;
for (i = 1; i < n - 1; i++) /*定位至列单链表中的第n-1个元素*/
p1 = p1->next;
p2 = p1->next; /*p2指向列单链表中的第n个元素*/
if (n == 1) /*若是删除第m行第1列的字符*/
{
q->next = p1->next;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Linux作业基于C语言编写的文本编辑器系统源码+超详细注释.zip 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【备注】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为因为名字后再运行!有问题私信沟通,祝顺利! Linux作业基于C语言编写的文本编辑器系统源码+超详细注释.zipLinux作业基于C语言编写的文本编辑器系统源码+超详细注释.zipLinux作业基于C语言编写的文本编辑器系统源码+超详细注释.zipLinux作业基于C语言编写的文本编辑器系统源码+超详细注释.zipLinux作业基于C语言编写的文本编辑器系统源码+超详细注释.zip Linux作业基于C语言编写的文本编辑器系统源码+超详细注释.zip Linux作业基于C语言编写的文本编辑器系统源码+超详细注释.zip Linux作业基于C语言编写的文本编辑器系统源码+超详细注释.zip
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 1 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
北航程序员小陈
- 粉丝: 3221
- 资源: 2447
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)