经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现简单的文本编辑器
来源:jb51  时间:2021/5/10 8:46:01  对本文有异议

本文实例为大家分享了C语言实现简单的文本编辑器的具体代码,供大家参考,具体内容如下

预期实现三个功能,第一,可以对指定的行输入字符串;第二,删除指定行的字符串;第三,显示编辑器的行数和内容。

我们通过块链结构来实现本程序。“块”的含义是每个块中可以存放多个字符,“链”的含义是块与块之间通过链表结构进行连接。

IDE : Code::Blocks 17.12

Compiler : GNU GCC Compiler

  1. /*块链结构实现简单的文本编辑器*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define MAX 100
  5. void Init(); //初始化编辑器
  6. void input(); //对指定的行进行输入,#号结束
  7. void Delline(); //删除指定的行
  8. void List(); //显示文本编辑器的内容
  9. int Menu(); //列出选择菜单并进行选择
  10. //定义存放字符串的节点,块链结构
  11. typedef struct node{
  12. char data[50];
  13. struct node *next;
  14. }strnode;
  15. //定义每行头节点
  16. typedef struct head{
  17. int number; //行号
  18. int length; //字符串的长度
  19. strnode * next;
  20. }headnode;
  21. //定义有100行
  22. headnode Head[MAX];
  23. //函数Init()实现每行头节点的初始化
  24. void Init(){
  25. int i;
  26. for(i=0;i<MAX;++i){
  27. Head[i].length=0;
  28. }
  29. }
  30. //函数Menu()实现选择菜单
  31. int Menu(){
  32. int i;
  33. i=0;
  34. printf("-------------\n");
  35. printf("1. Input\n");
  36. printf("2. Delete\n");
  37. printf("3. List\n");
  38. printf("4. Exit\n");
  39. printf("-------------\n");
  40. while(i<=0 || i>4){
  41. printf("please choose\n");
  42. scanf("%d",&i);
  43. }
  44. return i;
  45. }
  46. //函数input(),向指定行中输入字符串
  47. void input(){
  48. strnode * p;
  49. int i,j,LineNum;
  50. char ch;
  51. while(1){
  52. j=-1;
  53. printf("input the number of line(0~100),101-exit:\n");
  54. scanf("%d",&LineNum); //输入要写入的行号
  55. if(LineNum<0 || LineNum>=MAX){
  56. return;
  57. }
  58. printf("please input,#-end\n");
  59. i=LineNum;
  60. Head[i].number=LineNum;
  61. Head[i].next=(strnode *)malloc(sizeof(strnode));
  62. p=Head[i].next;
  63. p->next=NULL;
  64. ch=getchar();
  65. while(ch!='#'){
  66. ++j;
  67. if(j>=50){ //如果字符串长度超过50,需要再分配一个节点空间
  68. p->next=(strnode *)malloc(sizeof(strnode));
  69. p->next->next=NULL;
  70. p=p->next; //p指向新分配的节点
  71. }
  72. p->data[j%50]=ch; //将输入的字符放入data中
  73. ch=getchar();
  74. }
  75. Head[i].length=j+1; //行的长度,以字符为单位
  76. }
  77. }
  78. //函数Delline()实现对指定行的删除
  79. void Delline(){
  80. strnode * p,*q;
  81. int i,LineNum;
  82. while(1){
  83. printf("input the number of line which do you want to delete(0~100),101-exit:\n");
  84. scanf("%d",&LineNum); //输入要删除的行号
  85. if(LineNum<0 || LineNum>=MAX){
  86. return;
  87. }
  88. i=LineNum;
  89. p=Head[i].next;
  90. if(Head[i].length>0){
  91. while(p!=NULL){
  92. q=p->next;
  93. free(p);
  94. p=q;
  95. }
  96. Head[i].length=0;
  97. Head[i].number=0;
  98. }
  99. }
  100. }
  101. //函数List()将输入的内容显示在屏幕上
  102. void List(){
  103. strnode *p;
  104. int i,j,m,n;
  105. for(i=0;i<MAX;++i){
  106. if(Head[i].length>0){
  107. printf("line%d",Head[i].number);
  108. n=Head[i].length;
  109. m=1;
  110. p=Head[i].next;
  111. for(j=0;j<n;++j){
  112. if(j>=50*m){ //以50为基准,超过一个则指向下一个节点
  113. p=p->next;
  114. ++m; //节点个数
  115. }else{
  116. printf("%c",p->data[j%50]); //将节点中内容输出
  117. }
  118. }
  119. printf("\n");
  120. }
  121. }
  122. printf("\n");
  123. }
  124. int main()
  125. {
  126. int sel;
  127. Init(); //初始化编辑器
  128. while(1){
  129. sel=Menu();
  130. switch(sel){ //对输入的数字进行选择
  131. case 1:
  132. input();
  133. break;
  134. case 2:
  135. Delline();
  136. break;
  137. case 3:
  138. List();
  139. break;
  140. case 4:
  141. exit(0);
  142. }
  143. }
  144. return 0;
  145. }

测试运行结果如下:

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号