文章编辑课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<"***** 1.打开文件2.输入3.删除4.插入5.查找6.存盘0.退出*****"<<endl;
cout<<"***** *****"<<endl;
cout<<"***** *****"<<endl;
cout<<"****************************************************************"<<endl;
{
k++;
j++;
next[j] = k;
}
else
k = next[k];
}
}
int KMPFind(string p, int next[], string q,int search[]) //用KMP算法在主串中查找子串,p为主串,q为子串
{
int i = 0, j = 0, k = 0, plength = p.length(), qlength=q.length(),flag=0,t=0;
return (p);
}
int Search(LNode *L,char item) //查找元素
{
int j=0;
LNode *p;
p=L;
while(p)
{
if(p->data ==item)
j++;
p=p->next ;
}
return j;
}
int InsertLinkList(LNode *L,int item,int pos) //链表的插入
greenColor();
cout<<"文字:"<<sum<<"数字:"<<Fignum<<"字母:"<<English<<"标点符号:"<<Punnum<<"空格:"<<Spacenum<<endl;
{
int i;
LNode *L,*s;
if(len<=0)
return NULL;
s=new LNode;
s->data =ch[0];
S =ch[0];
s->next =NULL;
L=s;
for(i=2;i<=len;i++)
InsertLinkList(L,ch[i-1],i);
return (L);
}
void redColor() //将字体变为红色
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,
FOREGROUND_RED |
FOREGROUND_INTENSITY); //前景色_加强
}
while (i < plength)
{
if (j == -1 || p[i] == q[j])
{
i++;
j++;
}
else
j = next[j];
if (j == qlength)
{
flag++;
search[t]= i-qlength;//flag存放的是第一次匹配到的字符的首位置
t++;
}
}
return flag;
}
void whiteColor() //将字体恢复为白色
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,
FOREGROUND_BLUE |
FOREGROUND_RED |
FOREGROUND_GREEN);
}
void jiemian() //主界面函数
{
blueColor( );
cout<<"****************************************************************"<<endl;
cout<<"***** *****"<<endl;
cout<<"***** '请输入0-6之间数字选择要执行的操作!' *****"<<endl;
实 验 报 告
(课程设计)
课程名称:数据结构
实验项目名称:文章编辑
学院:计算机与软件学院
指导教师:
报告人:
实验时间
实验报告提交时间:
教务处制
实验项目名称
一、问题描述
描述算法设计的内容、约束条件,要求达到的目标等内容。(由老师公布)
输入一页文字,每行最多不超过80个字符,共N行;
程序可以统计出文字、数字、空格的个数
English++;
else if((ch[i]>=33 && ch[i]<=64) || (ch[i]>=91 && ch[i]<=96) || (ch[i]>=123 && ch[i]<=126))
Punnum++;
else if(ch[i]==' ')
Spacenum++;
i++;
}
system("cls");
int search[Max];
LNode *SearchLinkList(LNode *L,int posnum) //查找位置
{
int j;
LNode *p;
p=L;
j=1;
while(p && j<posnum)
{
p=p->next ;
j++;
}
if(!p || j>posnum)
return NULL;
七、程序清单
程序清单如下:
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<conio.h>
#include <windows.h>
using namespace std;
#define Max 100000
{
int i = 0, j = 0, k = 0, plength = p.length(), qlength=q.length(),flag=0,t=0;
while (i < plength)
{
if (j == -1 || p[i] == q[j])
{
i++;
j++;
}
else
j = next[j];
六、实验总结
主要说明算法的特点,特别是重点说明独创或创新部分,相关实验最有价值的内容,在哪些方面需要进一步了解或得到帮助,以及编程实现算法设计的感悟等内容。
刚开始做的时候并没有考虑那么多,只是想实现查找某个字符出现的次数,但是那样太简单了与实验目的不符,最后用KMP算法实现各种个数的字符的查找,并且在此基础上进行各种操作(删除),存盘和打开文件的时候出现一些问题,也自行解决了.在此次试验中意识到数据结构算法的灵活性.之前学的KMP算法是进行子串和主串的匹配,没有考虑那么多,在此次试验中实现了多个循环过程,从而达到实验目的.
要求在光标下(与记事本相似)做插入、删除等操作
要求能够存盘,并能对老文件打开进行修改操作
采用的数据结构及其算法:线性结构[采用顺序存储方式];查找、插入、删除
二、基本要求
描述算法设计项目应达到的基本要求。
应该实现基本的删除插入查找打开文件以及存盘等操作.并能对打开的文件里的内容进行插入删除查找等操作,并且在进行完这些操作之后能够进行存盘.
next[0] = -1;
int length = p.length() - 1;
while (j <length)
{
if (k == -1 || p[j] == p[k])
{
k++;
j++;
next[j] = k;
}
else
k = next[k];
}
}
int KMPFind(string p, int next[], string q,int search[]) //用KMP算法在主串中查找子串,p为主串,q为子串
if (j == qlength)
{
flag++;
search[t]= i-qlength;//flag存放的是每一次匹配到的字符的首位置
t++;
}
}
return flag;
}
Search[]数组存放子串出现的位置.
四、实验步聚
详细介绍实验操作步骤(程序流程图及必要说明)。
五、测试与结论
粘贴算法设计程序运行的截图,并加以简单文字说明。
三、分析与实验
分析算法设计方法,拟采用的数据结构(类结构)与主要算法实现原理等内容。
拟采用链表进行操作,与字符串结合.
主要运用了KMP算法进行查找操作,在删除中也有涉及.
void GetNext(string p, int next[]) //求模式串p的next[j]的值
{
int j = 0, k = -1;
void greenColor() //字体变为绿色
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,
FOREGROUND_GREEN |
FOREGROUND_INTENSITY); //前景色_加强
}
void GetNext(string p, int next[]) //求模式串p的next[j]的值
{
int j = 0, k = -1;
next[0] = -1;
int length = p.length() - 1;
while (j <length)
{
if (k == -1 || p[j] == p[k])
return 1;
}
void blueColor( ) //将字体变为蓝色
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,
FOREGROUND_BLUE |
FOREGROUND_GREEN |
FOREGROUND_INTENSITY); //前景色_加强
}
int DeleteLinkList(LNode *L,int pos) //按位置删除,待与光标连接一起
{
int item;
LNode *p,*q;
p=SearchLinkList(L,pos-1);
if(!p)
return -1;
q=p->next ;
p->next =p->next ->next ;
cout<<"*****输入'#'时,输入截止. *****"<<endl;
cout<<"****************************************************************"<<endl;
cout<<"***** *****"<<endl;
cout<<"***** *****"<<endl;
struct LNode
{
char data;
LNode *next;
};
LNode *LinkList;
HANDLE hout;
string S ;
int sum=0,Punnum=0,Fignum=0,Spacenum=0,English=0; //定义全局变量,统计数字字母空格标点符号的个数
int next[Max]; //定义next数组
item=q->data ;
delete(q);
return (item);
}
int ShowLinkList(LNode *L) //链表的输出
{
LNode *p;
if(!L)
return -1;
p=L;
while(p->next )
{
cout<<p->data;
p=p->next ;
}
cout<<p->data <<endl;
{
LNode *p,*s;
p=SearchLinkList(L,pos-1);
if(!p)
return -1;
s=new LNode;
s->data =item;
S+=s->data ;
s->next =p->next ;
p->next =s;
return 1;
}
LNode *CreatLinkList(char *ch,int len) //创建单链表
程序运行必须覆盖算法的各种情况,最后说明算法设计程序是否满足算法设计实验目标和要求。
主界面:
先打开文件进行操作:
删除操作:
查找操作:
查找一个字符的情况:
查找两个字符的情况:
查找两个以上字符的情况:
删除操作:
插入操作:
存盘:
退出:
直接输入进行各种操作:
查找操作:
插入操作:
删除操作:
存盘操作:
存盘的时候每行存的是80个字符.
cout<<"请根据菜单提示,输入要执行的操作!"<<endl;
whiteColor();
}
void Input() //输入
{
sum=0,Punnum=0,Fignum=0,Spacenum=0ຫໍສະໝຸດ BaiduEnglish=0;
cout<<"请输入文章内容:"<<endl;
int i=0;
char ch[100000],end; //主函数中以数组方式输入
getchar();
while((end=getchar())!='#')
{
sum++;
ch[i]=end;
if(ch[i]>=48 && ch[i]<=57)
Fignum++;
else if((ch[i]>='a' && ch[i]<='z') || (ch[i]>='A' && ch[i]<='Z'))
相关文档
最新文档