用C语言编写一个可以插入删除的行编辑程序
时间: 2023-09-10 14:06:00 浏览: 48
下面是一个简单的行编辑程序,可以在控制台中进行简单的插入、删除和显示,使用C语言编写:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 256
typedef struct {
char *line;
int len;
} Line;
typedef struct {
Line *lines;
int num_lines;
int max_lines;
} Buffer;
Buffer *create_buffer(int max_lines) {
Buffer *buf = malloc(sizeof(Buffer));
buf->lines = malloc(sizeof(Line) * max_lines);
buf->num_lines = 0;
buf->max_lines = max_lines;
return buf;
}
void destroy_buffer(Buffer *buf) {
for (int i = 0; i < buf->num_lines; i++) {
free(buf->lines[i].line);
}
free(buf->lines);
free(buf);
}
void insert_line(Buffer *buf, int line_num, char *line) {
if (buf->num_lines == buf->max_lines) {
printf("Buffer full\n");
return;
}
if (line_num < 0 || line_num > buf->num_lines) {
printf("Invalid line number\n");
return;
}
for (int i = buf->num_lines; i > line_num; i--) {
buf->lines[i] = buf->lines[i-1];
}
buf->lines[line_num].line = strdup(line);
buf->lines[line_num].len = strlen(line);
buf->num_lines++;
}
void delete_line(Buffer *buf, int line_num) {
if (line_num < 0 || line_num >= buf->num_lines) {
printf("Invalid line number\n");
return;
}
free(buf->lines[line_num].line);
for (int i = line_num; i < buf->num_lines-1; i++) {
buf->lines[i] = buf->lines[i+1];
}
buf->num_lines--;
}
void display_buffer(Buffer *buf) {
for (int i = 0; i < buf->num_lines; i++) {
printf("%d: %s\n", i+1, buf->lines[i].line);
}
}
int main() {
Buffer *buf = create_buffer(10);
char line[MAX_LINE_LEN];
int line_num;
while (1) {
printf("Enter command (i/d/q): ");
fgets(line, MAX_LINE_LEN, stdin);
if (line[0] == 'i') {
printf("Enter line number: ");
fgets(line, MAX_LINE_LEN, stdin);
line_num = atoi(line) - 1;
printf("Enter line: ");
fgets(line, MAX_LINE_LEN, stdin);
insert_line(buf, line_num, line);
} else if (line[0] == 'd') {
printf("Enter line number: ");
fgets(line, MAX_LINE_LEN, stdin);
line_num = atoi(line) - 1;
delete_line(buf, line_num);
} else if (line[0] == 'q') {
break;
} else {
printf("Invalid command\n");
}
display_buffer(buf);
}
destroy_buffer(buf);
return 0;
}
```
这个行编辑器使用一个结构体来存储缓冲区的内容,包括行数、每一行的长度和内容。它支持插入、删除和显示操作,可以通过控制台进行输入和输出。在输入命令时,可以使用 "i" 表示插入行, "d" 表示删除行, "q" 表示退出编辑器。