简单行编辑程序

时间: 2024-01-27 09:09:11 浏览: 23
行编辑程序是一种文本编辑程序,它允许用户在命令行界面下对文本进行编辑。简单行编辑程序的基本功能包括: 1. 插入文本:在当前光标所在位置插入新的文本。 2. 删除文本:删除当前光标所在位置的字符或一段文本。 3. 移动光标:将光标向左或向右移动,或跳转到文本的开头或结尾。 4. 查找文本:在文本中查找指定的字符串。 下面是一个简单的行编辑程序的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LEN 1024 int main() { char line[MAX_LINE_LEN]; int cursor_pos = 0; int line_len = 0; while (fgets(line, MAX_LINE_LEN, stdin) != NULL) { line_len = strlen(line); if (line[line_len - 1] == '\n') { line[line_len - 1] = '\0'; line_len--; } printf("%s\n", line); while (1) { printf("> "); char cmd[10]; char arg[MAX_LINE_LEN]; if (scanf("%s", cmd) == EOF) { exit(0); } if (strcmp(cmd, "i") == 0) { scanf("%s", arg); int arg_len = strlen(arg); memmove(line + cursor_pos + arg_len, line + cursor_pos, line_len - cursor_pos); memcpy(line + cursor_pos, arg, arg_len); cursor_pos += arg_len; line_len += arg_len; printf("%s\n", line); } else if (strcmp(cmd, "d") == 0) { int count; scanf("%d", &count); if (count > line_len - cursor_pos) { count = line_len - cursor_pos; } memmove(line + cursor_pos, line + cursor_pos + count, line_len - cursor_pos - count); line_len -= count; printf("%s\n", line); } else if (strcmp(cmd, "l") == 0) { if (cursor_pos > 0) { cursor_pos--; } printf("%s\n", line); } else if (strcmp(cmd, "r") == 0) { if (cursor_pos < line_len) { cursor_pos++; } printf("%s\n", line); } else if (strcmp(cmd, "b") == 0) { cursor_pos = 0; printf("%s\n", line); } else if (strcmp(cmd, "e") == 0) { cursor_pos = line_len; printf("%s\n", line); } else if (strcmp(cmd, "f") == 0) { scanf("%s", arg); char *pos = strstr(line + cursor_pos, arg); if (pos != NULL) { cursor_pos = pos - line; } printf("%s\n", line); } else if (strcmp(cmd, "q") == 0) { exit(0); } } } return 0; } ``` 这个程序可以通过命令行读取用户输入的文本,并提供插入、删除、移动光标、查找等功能。用户可以使用键盘输入命令来执行相应的操作,例如: - i text:在当前光标位置插入文本 text。 - d n:删除当前光标位置后的 n 个字符。 - l:向左移动光标一格。 - r:向右移动光标一格。 - b:将光标移动到文本开头。 - e:将光标移动到文本结尾。 - f str:在文本中查找字符串 str 并将光标移动到第一个匹配的位置。 - q:退出编辑程序。 该程序只是一个简单的示例,可以根据实际需求进行修改和扩展。

相关推荐

最新推荐

recommend-type

数据结构课程设计:行编辑程序

本行编辑程序是以每行不超过320个字符为前提的。每次编辑会读入80行,活区每次只显示20行。 1. 该程序要实现以下基本编辑命令和一些相关的命令: (1) 行插入。格式:i&lt;回车&gt;&lt;行号&gt;&lt;回车&gt;&lt;文本&gt;&lt;回车&gt;。 将&lt;文本&gt;...
recommend-type

简单行编辑课程设计说明书

用栈实现简单的行编辑程序,主要功能有:行插入(格式:i&lt;行号&gt;&lt;回车&gt;&lt;文本&gt;&lt;回车&gt;,即 将&lt;文本&gt;插入活区中的第&lt;行号&gt;行之后);行删除(格式:d&lt;行号1&gt;[ &lt;行号2&gt;]&lt;回车&gt;, 删除活区中第&lt;行号1&gt;行(到第&lt;行号2&gt;行),...
recommend-type

简单的行编辑程序要求能够接受用户从终端输入的程序或数据,并存入用户的数据的数据区.

即在计算机的终端上由用户输入要编辑的字符.如果发现输入的字符有一个错误,补进一个#号,以示前一个错误;如果发现当前键入的行内差错较多难以补救,则可以输入一个退行符@,以示当前行中的字符无效;回车表示换行,在下一...
recommend-type

JAVA简单记事本程序设计实验报告(带源码)

JAVA简单记事本程序设计实验报告(带源码) 课题:学生成绩管理 4.功能要求: 编写一个简单记事本程序,要求包含以下菜单项 文件 新建、打开、保存、退出 编辑 剪切、拷贝、粘贴、查找 帮助 关于 5.实现文件和编辑...
recommend-type

数据结构程序设计.docx

2) 编写九宫重排问题的启发式搜索求解程序。 2. 实验任务: 在3х3九宫棋盘中,放置数码为1~8的8个棋子,棋盘中留有一个空格,空格周围的棋子可以移动到空格中,从而改变棋盘的布局。根据给定初始布局和目标布局,...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。