本文实例为大家分享了C语言实现简单的文本编辑器的具体代码,供大家参考,具体内容如下
预期实现三个功能,第一,可以对指定的行输入字符串;第二,删除指定行的字符串;第三,显示编辑器的行数和内容。
我们通过块链结构来实现本程序。“块”的含义是每个块中可以存放多个字符,“链”的含义是块与块之间通过链表结构进行连接。
IDE : Code::Blocks 17.12
Compiler : GNU GCC Compiler
- /*块链结构实现简单的文本编辑器*/
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 100
-
- void Init(); //初始化编辑器
- void input(); //对指定的行进行输入,#号结束
- void Delline(); //删除指定的行
- void List(); //显示文本编辑器的内容
- int Menu(); //列出选择菜单并进行选择
-
- //定义存放字符串的节点,块链结构
- typedef struct node{
- char data[50];
- struct node *next;
- }strnode;
- //定义每行头节点
- typedef struct head{
- int number; //行号
- int length; //字符串的长度
- strnode * next;
- }headnode;
- //定义有100行
- headnode Head[MAX];
-
- //函数Init()实现每行头节点的初始化
- void Init(){
- int i;
- for(i=0;i<MAX;++i){
- Head[i].length=0;
- }
- }
-
- //函数Menu()实现选择菜单
- int Menu(){
- int i;
- i=0;
- printf("-------------\n");
- printf("1. Input\n");
- printf("2. Delete\n");
- printf("3. List\n");
- printf("4. Exit\n");
- printf("-------------\n");
- while(i<=0 || i>4){
- printf("please choose\n");
- scanf("%d",&i);
- }
- return i;
- }
-
- //函数input(),向指定行中输入字符串
- void input(){
- strnode * p;
- int i,j,LineNum;
- char ch;
- while(1){
- j=-1;
- printf("input the number of line(0~100),101-exit:\n");
- scanf("%d",&LineNum); //输入要写入的行号
- if(LineNum<0 || LineNum>=MAX){
- return;
- }
- printf("please input,#-end\n");
- i=LineNum;
- Head[i].number=LineNum;
- Head[i].next=(strnode *)malloc(sizeof(strnode));
- p=Head[i].next;
- p->next=NULL;
- ch=getchar();
- while(ch!='#'){
- ++j;
- if(j>=50){ //如果字符串长度超过50,需要再分配一个节点空间
- p->next=(strnode *)malloc(sizeof(strnode));
- p->next->next=NULL;
- p=p->next; //p指向新分配的节点
- }
- p->data[j%50]=ch; //将输入的字符放入data中
- ch=getchar();
- }
- Head[i].length=j+1; //行的长度,以字符为单位
- }
- }
-
-
- //函数Delline()实现对指定行的删除
- void Delline(){
- strnode * p,*q;
- int i,LineNum;
- while(1){
- printf("input the number of line which do you want to delete(0~100),101-exit:\n");
- scanf("%d",&LineNum); //输入要删除的行号
- if(LineNum<0 || LineNum>=MAX){
- return;
- }
- i=LineNum;
- p=Head[i].next;
- if(Head[i].length>0){
- while(p!=NULL){
- q=p->next;
- free(p);
- p=q;
- }
- Head[i].length=0;
- Head[i].number=0;
- }
-
- }
- }
-
-
- //函数List()将输入的内容显示在屏幕上
- void List(){
- strnode *p;
- int i,j,m,n;
- for(i=0;i<MAX;++i){
- if(Head[i].length>0){
- printf("line%d",Head[i].number);
- n=Head[i].length;
- m=1;
- p=Head[i].next;
- for(j=0;j<n;++j){
- if(j>=50*m){ //以50为基准,超过一个则指向下一个节点
- p=p->next;
- ++m; //节点个数
- }else{
- printf("%c",p->data[j%50]); //将节点中内容输出
- }
- }
- printf("\n");
- }
- }
- printf("\n");
- }
-
- int main()
- {
- int sel;
- Init(); //初始化编辑器
- while(1){
- sel=Menu();
- switch(sel){ //对输入的数字进行选择
- case 1:
- input();
- break;
- case 2:
- Delline();
- break;
- case 3:
- List();
- break;
- case 4:
- exit(0);
- }
- }
- return 0;
- }
测试运行结果如下:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。