本文實例為大家分享了C語言實現(xiàn)簡單的文本編輯器的具體代碼,供大家參考,具體內(nèi)容如下
預期實現(xiàn)三個功能,第一,可以對指定的行輸入字符串;第二,刪除指定行的字符串;第三,顯示編輯器的行數(shù)和內(nèi)容。
我們通過塊鏈結(jié)構(gòu)來實現(xiàn)本程序。“塊”的含義是每個塊中可以存放多個字符,“鏈”的含義是塊與塊之間通過鏈表結(jié)構(gòu)進行連接。
IDE : Code::Blocks 17.12
Compiler : GNU GCC Compiler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/*塊鏈結(jié)構(gòu)實現(xiàn)簡單的文本編輯器*/ #include <stdio.h> #include <stdlib.h> #define MAX 100 void Init(); //初始化編輯器 void input(); //對指定的行進行輸入,#號結(jié)束 void Delline(); //刪除指定的行 void List(); //顯示文本編輯器的內(nèi)容 int Menu(); //列出選擇菜單并進行選擇 //定義存放字符串的節(jié)點,塊鏈結(jié)構(gòu) typedef struct node{ char data[50]; struct node *next; }strnode; //定義每行頭節(jié)點 typedef struct head{ int number; //行號 int length; //字符串的長度 strnode * next; }headnode; //定義有100行 headnode Head[MAX]; //函數(shù)Init()實現(xiàn)每行頭節(jié)點的初始化 void Init(){ int i; for (i=0;i<MAX;++i){ Head[i].length=0; } } //函數(shù)Menu()實現(xiàn)選擇菜單 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; } //函數(shù)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,需要再分配一個節(jié)點空間 p->next=(strnode *) malloc ( sizeof (strnode)); p->next->next=NULL; p=p->next; //p指向新分配的節(jié)點 } p->data[j%50]=ch; //將輸入的字符放入data中 ch= getchar (); } Head[i].length=j+1; //行的長度,以字符為單位 } } //函數(shù)Delline()實現(xiàn)對指定行的刪除 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; } } } //函數(shù)List()將輸入的內(nèi)容顯示在屏幕上 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為基準,超過一個則指向下一個節(jié)點 p=p->next; ++m; //節(jié)點個數(shù) } else { printf ( "%c" ,p->data[j%50]); //將節(jié)點中內(nèi)容輸出 } } printf ( "\n" ); } } printf ( "\n" ); } int main() { int sel; Init(); //初始化編輯器 while (1){ sel=Menu(); switch (sel){ //對輸入的數(shù)字進行選擇 case 1: input(); break ; case 2: Delline(); break ; case 3: List(); break ; case 4: exit (0); } } return 0; } |
測試運行結(jié)果如下:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/Ibelievesunshine/article/details/80052038