精品简易文本编辑器设计Word格式文档下载.docx
《精品简易文本编辑器设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《精品简易文本编辑器设计Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
2.1结构与算法分析
为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。
顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:
在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;
在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息:
2.11清空以前的文本信将用数组存的数据内容全部置为0,显示当前文本信息:
遍历顺序表中存入的信息,并输出到显示器上。
2.12编辑信息:
定义一个结构体,并在结构体中定义一个字符型的一维数组和两个整型变量,整型变量用于记录一维数组中存入数据的的行数与列数。
typedefstruct
{
charsr[MAXSIZE];
inthang;
intlie;
}shuru;
2.13替换文本信息:
首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息。
2.14插入文本信息:
首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置。
2.15移动文本信息:
首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息。
2.16删除文本信息:
首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息。
2.2流程图
图2—1文本编辑器流程
第三章.详细设计
#include"
stdafx.h"
#include"
stdio.h"
malloc.h"
string.h"
iostream.h"
stdlib.h"
conio.h"
#include<
fstream.h>
#defineLink_Size100
intNUM,C,N;
typedefstructlist
{//1、定义链表结点
chardata[50];
//记录一行字符
intlength;
//记录一行字符长度
structlist*next;
structlist*prior;
introw;
}LinkList;
LinkList*head;
///////////////////////////////////////////////////////////////////////////////
LinkList*CreatWord()
{//编辑文本内容
LinkList*temp;
charch;
inti,j;
head->
next=(LinkList*)malloc(sizeof(LinkList));
prior=NULL;
temp=head->
next;
temp->
length=0;
for(i=0;
i<
50;
i++)
data[i]='
\0'
;
printf("
开始创建文本,请输入文章(输入#号结束):
\n"
);
for(j=0;
j<
Link_Size;
j++)//控制一页
{
i++)//控制一行
ch=getchar();
//接收输入字符
data[i]=ch;
length++;
if(ch=='
#'
)
{
NUM=j;
break;
//文章结束时,Num来记录整个文章的行数
}
}
length=i;
next=NULL;
next=(LinkList*)malloc(sizeof(LinkList));
next->
prior=temp;
temp=temp->
row=NUM+1;
system("
cls"
returntemp;
}
voidPrintWord()
{//显示当前文章内容
//定义文本行数变量j,每行字符数i
LinkList*p;
p=head->
\n当前文章的内容是:
"
=NUM&
&
p!
=NULL;
j++)
for(i=0;
(i<
50)&
(p->
data[i])!
='
printf("
%c"
p->
data[i]);
}
p=p->
///////////////////////////////////////////////////////////////////////////////////
voidSearchWord(char*str1,LinkList*temp)
{//查找文章中的字符或者字符串
charData[20];
//记录需要查找的字符内容
inti,j,k=0,sum=0;
intl=1;
strcpy(Data,str1);
=NUM;
i++)
{
j++)
{
if((temp->
data[j])==Data[k])k++;
//将输入的查找字符与链表中信息比较,找到第一个相同的字符
elseif(Data[k]!
{
j=j-k;
k=0;
}
if(Data[k]=='
)
sum++;
j=j-k+1;
//从主串第j-k个位置重新查找
\t\t第%d次出现在第%d行第%d列\n"
l,i+1,j+1);
l++;
k=0;
continue;
}
\t\t\t字符串总共出现次数为:
%d\n\n"
sum);
C=sum;
N=i*50+j;
}
//////////////////////////////////////////////////////////////////////////////
voidDeleteWord(char*str2)
{//从主串第j-k个位置重新查找
charData[20];
//存储需要删除的字符或者字符串
LinkList*temp,*term;
inti,j,k,m,y,num;
strcpy(Data,str2);
for(y=0;
y<
C;
y++)
num=50;
k=0,m=0;
temp=head;
term=temp;
temp=temp->
for(j=0;
{
if((temp->
elseif(Data[k]!
){j=j-k;
k=0;
if(Data[k]=='
{
num=j;
break;
}
if(num<
50)break;
for(;
for(;
if(j+1<
k)
{
term->
data[50-k+num]=temp->
data[j+1];
//删除的字符串不在最后一行,将下一行的字符(由temp指向)前移到前行
else
temp->
data[j-k+1]=temp->
j=0;
/////////////////////////////////////////////////////////////////////////////////////////////
LinkList*InsertWord(LinkList*temp)
{//向文章中插入字符或者字符串
inth,l;
\n\t\t请输入要插入的字符或字符串:
getchar();
gets(Data);
\n\t\t当前文章内容为:
PrintWord();
\n\t\t请输入要插入的行:
scanf("
%d"
&
h);
\n\t\t请输入要插入的列:
l);
inti=(h-1)*50+l;
LinkList*a;
intn=strlen(Data);
intm;
intinsertRow=