文章编辑课程设计报告
next[0] = -1;
int length = p.length() - 1;
while (j <length)
{
if (k == -1 || p[j] == p[k])
{
k++;
j++;
nexБайду номын сангаас[j] = k;
}
else
k = next[k];
}
}
int KMPFind(string p, int next[], string q,int search[]) //用KMP算法在主串中查找子串,p为主串,q为子串
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;
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) //链表的插入
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");
七、程序清单
程序清单如下:
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<conio.h>
#include <windows.h>
using namespace std;
#define Max 100000
{
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) //创建单链表
三、分析与实验
分析算法设计方法,拟采用的数据结构(类结构)与主要算法实现原理等内容。
拟采用链表进行操作,与字符串结合.
主要运用了KMP算法进行查找操作,在删除中也有涉及.
void GetNext(string p, int next[]) //求模式串p的next[j]的值
{
int j = 0, k = -1;
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;
六、实验总结
主要说明算法的特点,特别是重点说明独创或创新部分,相关实验最有价值的内容,在哪些方面需要进一步了解或得到帮助,以及编程实现算法设计的感悟等内容。
刚开始做的时候并没有考虑那么多,只是想实现查找某个字符出现的次数,但是那样太简单了与实验目的不符,最后用KMP算法实现各种个数的字符的查找,并且在此基础上进行各种操作(删除),存盘和打开文件的时候出现一些问题,也自行解决了.在此次试验中意识到数据结构算法的灵活性.之前学的KMP算法是进行子串和主串的匹配,没有考虑那么多,在此次试验中实现了多个循环过程,从而达到实验目的.
程序运行必须覆盖算法的各种情况,最后说明算法设计程序是否满足算法设计实验目标和要求。
主界面:
先打开文件进行操作:
删除操作:
查找操作:
查找一个字符的情况:
查找两个字符的情况:
查找两个以上字符的情况:
删除操作:
插入操作:
存盘:
退出:
直接输入进行各种操作:
查找操作:
插入操作:
删除操作:
存盘操作:
存盘的时候每行存的是80个字符.
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;
{
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];
return 1;
}
void blueColor( ) //将字体变为蓝色
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,
FOREGROUND_BLUE |
FOREGROUND_GREEN |
FOREGROUND_INTENSITY); //前景色_加强
if (j == qlength)
{
flag++;
search[t]= i-qlength;//flag存放的是每一次匹配到的字符的首位置
t++;
}
}
return flag;
}
Search[]数组存放子串出现的位置.
四、实验步聚
详细介绍实验操作步骤(程序流程图及必要说明)。
五、测试与结论
粘贴算法设计程序运行的截图,并加以简单文字说明。
实 验 报 告
(课程设计)
课程名称:数据结构
实验项目名称:文章编辑
学院:计算机与软件学院
指导教师:
报告人:
实验时间
实验报告提交时间:
教务处制
实验项目名称
一、问题描述
描述算法设计的内容、约束条件,要求达到的目标等内容。(由老师公布)
输入一页文字,每行最多不超过80个字符,共N行;
程序可以统计出文字、数字、空格的个数
cout<<"***** 1.打开文件2.输入3.删除4.插入5.查找6.存盘0.退出*****"<<endl;
cout<<"***** *****"<<endl;
cout<<"***** *****"<<endl;
cout<<"****************************************************************"<<endl;
}
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])
}
void redColor() //将字体变为红色
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,
FOREGROUND_RED |
FOREGROUND_INTENSITY); //前景色_加强
}
cout<<"*****输入'#'时,输入截止. *****"<<endl;