文本编辑器c++实验报告附源代码文档格式.docx
- 文档编号:16531385
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:12
- 大小:62.07KB
文本编辑器c++实验报告附源代码文档格式.docx
《文本编辑器c++实验报告附源代码文档格式.docx》由会员分享,可在线阅读,更多相关《文本编辑器c++实验报告附源代码文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
c、申请动态存储空间:
head->
next=(LinkList*)malloc(sizeof(LinkList));
d、首行头指针的前驱指针为空:
pre=NULL;
首行指针:
temp=head->
next;
首行指针的前驱指针也为空:
temp->
定义没输入字符时文章长度为0:
length=0;
初始化为字符串结束标志,防止出现乱码:
for(i=0;
i<
80;
i++)
data[i]='
\0'
;
e、利用循环进行文本输入
for(j=0;
j<
LINK_INIT_SIZE;
j++)//控制一页
{for(i=0;
i++)//控制一行
{ch=getchar();
//接收输入字符
data[i]=ch;
//给temp指向的行赋值
·
·
length++;
//行中字符长度加1
if(ch=='
#'
)
{NUM=j;
break;
//文章结束时,Num来记录整个文章的行数
}}}
在字符输入的过程中,如果在单行输入的字符超过了80个字符,则需要以下操作:
输入字符数大于80,重新分配空间建立下一行
temp->
next=(LinkList*)malloc(sizeof(LinkList));
给temp的前驱指针赋值:
next->
pre=temp;
temp指向当前行:
temp=temp->
将下一行初始化为字符串结束标志,防止出现乱码:
for(i=0;
记录整个文章的行数:
row=NUM+1;
返回指向最后一行指针:
returntemp;
文本输入部分到此结束。
实验流程图:
程序清单
Headerfile
#include<
iostream>
string>
usingnamespacestd;
int*get_next(char*T,int*next);
//声明get_next函数以获取next数组。
intKMP(char*S,char*T);
//声明KMP函数调用next函数来进行查找。
intget_choice();
//选择要执行的功能。
voidserach(stringS);
//定义查找函数,用于进行字符串查找。
voidadd_char(string&
S);
//定义添加函数,用于进行字符串添加。
voidchange(string&
//定义替换函数,将修改指定位置上的字符为新指定的字符。
voiddelete_char(string&
//定义删除函数,将用于删除指定位置上的字符。
voiddisplay(string&
//显示函数,用于显示当前的字符串。
C++sourefile
#include"
textedit.h"
int*get_next(constchar*T,int*next){//根据T字符串将所得到的next数组值存在next指针指向的数组中
inti=0,j=-1;
intlength=strlen(T);
int*temp=next;
*next=-1;
while(i<
length){
if(j==-1||*(T+i)==*(T+j)){//如果字符串中第i个字符与从头起第j个相同,则i,j分别向后移一位
i++;
j++;
if(*(T+i)!
=*(T+j))//当遇到第一个不相等的字符时,当前的j值就是next数组第i个元素的值
*(next+i)=j;
else
*(next+i)=*(next+j);
//如果相等,则从字符串开始第j个元素的next值与当前位置的值相同
}
else
j=*(next+j);
//如果遇到第i个元素和从头起第j个元素不相同,则从第j个元素的next值的位置开始比较,即回溯
}
returntemp;
}
intKMP(stringS,stringT){
intS_Length=S.length();
intT_Length=T.length();
if(S_Length<
T_Length)//如果目标串比要查找的串要短,直接返回失败
return0;
inti=0,j=0;
int*next=newint[T_Length];
get_next(T.c_str(),next);
while(i<
S_Length&
&
j<
T_Length){
if(j==-1||*(S.c_str()+i)==*(T.c_str()+j)){//如果对应i,j号元素相同,则依次向后错一位,否则通过next函数,将j指针回溯一定距离。
if(j>
=T_Length)//实际上当j==T_Length时,即意味着查找成功,返回开始字符所在的位置,否则返回失败
returni-T_Length+1;
return0;
intget_choice()//获取用户输入的选项,以进行相应操作。
{
inttemp;
cout<
<
"
请输入你即将执行的操作:
\n1--查找\t2--添加\t3--替换\n4--删除\t5--显示当前字符串\t6--退出\n你的选择:
while(true){
cin>
>
temp;
if(temp<
7&
temp>
0)//只有输入1、2、3、4、5、6时候才会返回输入的选项。
returntemp;
{
cout<
你的输入有误,请重新输入\n你的选择:
voidserach(stringS)
intk;
stringT;
请输入要查找的串:
cin.sync();
//清空缓存区,否则将自动读入输入选项时候按下的回车键。
getline(cin,T);
if(k=KMP(S,T))//KMP的返回值不为0即查找成功时候,if条件判断认为是真。
cout<
所要查找的字符串从第"
k<
个字符开始。
endl;
else
查找失败"
S){
stringm;
请输入你想插入的位置:
while(true)
{
k;
if(k>
=0&
=S.length())//插入的位置不能在字符串外面。
break;
你输入的位置有误。
请重新输入你想插入的位置:
请输入你要插入的字符串:
//同前
getline(cin,m);
S=S.insert(k,m);
//将字符串m插到S的第k个位置上。
S){//调用String类中将第k个字符到第m个字符替换为新字符串的函数。
intk,m;
stringtemp;
请输入由第几个字符开始替换:
if(k<
S.length()&
k>
=0)//起始位置必须小于长度且不能等于
替换至第几个字符:
while(true){
cin>
m;
if(m<
=S.length()&
m>
k)//结尾位置必须不能大于字符串长度,并且不能小于起始位置。
break;
else
cout<
输入有误,请重新输入结尾:
}
输入有误,请重新输入开头:
请输入要替换成的字符串:
getline(cin,temp);
S.replace(k,m,temp);
//将目标串替换至指定位置。
请输入从第几个字符开始删:
=0)//若k==S.length(),则下面无法删除0个。
删除的字符个数为:
if((k+m)<
0)//同前,删除的最后一个字符的位置不能超出字符串的长度。
输入有误,请重新输入个数:
输入有误,请重新输入开始位置:
S=S.erase(k,m);
S)
当前的字符串为:
S.data()<
voidmain()
intchoice;
stringS;
请输入一个字符串:
getline(cin,S);
choice=get_choice();
switch(choice){
case1:
serach(S);
break;
case2:
add_char(S);
case3:
change(S);
case4:
delete_char(S);
case5:
display(S);
default:
exit(0);
实验内容(算法、程序、步骤和方法)
数据记录
和计算
结论
(结果)
基本达到了实验的要求。
可以实现字符串的添加,查找,删除,现实,,,,。
而且可以对txt文件进行编辑。
工作正常。
可以正常的打开txt文件进行编辑,可以对文件进行保存
小结
自己在整个课程设计过程中还是比较轻松的,编写过程中遇到的困难及问题都通过查阅资料、向老师提问得以解决。
所以本次课程设计自己最大的体会就是不管写什么程序,自己首先得对这个问题要分析透彻,要知道自己要干什么,然后才能让自己干什么。
指导老师评议
成绩评定:
指导教师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文本 编辑器 c+ 实验 报告 源代码