说到行编辑器的实现,其实还是主要运用栈的结构特点,具体理论参考《数据结构》(严蔚敏著)实现代码如下:
#include <iostream>
using namespace std;
#define MAX_SIZE 100
void LineEditor(char* c1, int& length){
char* stack = new char[MAX_SIZE];
int top = 0;
int i;
for(i = 0; i < length; i++){
if(c1[i] == '#'){//'#'退格符
if(top > 0){
top--;
}
}else if(c1[i] == '@'){//'@'删除整行
top = 0;
}else if(c1[i] == '^'){//'^'回车换行
stack[top] = '/n';
top++;
stack[top] = '/r';
top++;
}else {
stack[top] = c1[i];
top++;
}
}
length = top;
int k = length;
while(top > 0){
top--;
k--;
c1[k] = stack[top];
}
delete stack;
}
void main(){
int length1 = 0;
int i;
char c1[MAX_SIZE];
cout<<"chs:";
for(i = 0; i < MAX_SIZE; i++){
char c;
cin>>c;
if(c == '$')//'$'为终结符
break;
c1[i] = c;
length1++;
}
LineEditor(c1, length1);
for(i = 0; i < length1; i++){
cout<<c1[i];
}
cout<<endl;
}