当前位置: 首页 > news >正文

食品网站建设的照片制作一个简单的网站

食品网站建设的照片,制作一个简单的网站,内网是怎么做网站的,重庆建站实现代码的过程中 具体细节、问题: (1):关于写Get_next函数的标题: 现象: PPT上写的是: void get_next(SString T, int &next[]) 然而并不能运行,而当我们去掉了引用符号&…

 实现代码的过程中

具体细节、问题:

(1):关于写Get_next函数的标题:


现象:

PPT上写的是:

void get_next(SString T, int &next[])

然而并不能运行,而当我们去掉了引用符号(&)以后:

void get_next(SString T, int next[])

却可以运行,但是这里引用的符号就代表着把数据传回(给)主函数,所以最好不要省略

//&:返回所有我们算出的next[]


原因:

数组不能采用引用格式来传值

根本不存在“元素都是引用的数组”:

本身数组就是用他的首地址来传值的,其首地址代表一大串数组的信息和地址(位置)

而引用传值只是给变量取了一个别名来传值,自然不能无法整个数组的值

总得来说就是一个格式的问题


(2):关于Get_next函数中k的初值:

	int j = 0,//从头开始算起k = -1;next[0] = -1;//根据公式

一开始我们想令 k = 0; ,后面真的想去运行以后发现不可以:

根据公式和算法设计,即使是MAX[k]也必须要小于j


(3):关于KMP函数里,next数组赋初值 和 调用Get_next函数的语句的问题:

不同版本不同教材的不同写法:


 网课(PPT):

	int i = pos, j = 1;

没有给next数组赋初值

也没有调用Get_next函数

啥也没有,主打的就是一个陪伴

这样是肯定不行的:


书上:

	int next[MAXLEN];int i = pos, j = 1;Get_next(T, next);

给next数组赋初值

调用Get_next函数,但是里面写的是next而非next[]

结果:


把书上的改进为:

给next数组赋初值

调用Get_next函数,并且写next[]

	int next[MAXLEN];int i = pos, j = 1;Get_next(T, next[]);

结果也不行:

到这里,我们似乎已经山穷水尽,走投无路了

这个时候多和同学沟通交流就成了关键,于是我们又有了如下进展,这也是我们最终最重要的

问题(3)的收获:


(1):首先:

给next数组赋初值不能少毋庸置疑,没有可能说有那个变量能够不赋初值就直接进行运算操作的

所以PPT上的情况肯定是不行的(差评)


(2):对于书上写的这种情况:

如果我们不要这个Get_next函数的引用符号(不再采用引用传值)

采用实参形参传值,即将其定义的抬头改为:

void Get_next(SString T, int next[])

程序即可成功正确运行:(完整程序如下)这也正是我们

用next最终实现KMP算法的结果:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit
#include<math.h>//OVERFLOW,exittypedef int Status;
#define MAXLEN 255struct SString//Sequence String
{char ch[MAXLEN + 1]; //存储串的一维数组int length; //串的当前长度长度
};void Get_next(SString T, int next[])
//给你一个子串T,教你逐个算出每个位序对应的next[]
{int j = 0,//从头开始算起k = -1;next[0] = -1;//根据公式while (j <= T.length - 1)//因为位序从0(而非1)开始{if (k == -1 || T.ch[k] == T.ch[j]){j++;k++;next[j] = k;}elsek = next[k];}
}int Index_KMP(SString S, SString T, int pos)
{int next[MAXLEN];Get_next(T, next);int i = pos, j = 1;while (i <= S.length && j <= T.length){if (S.ch[i] == T.ch[j]){++i; ++j;}//主串和子串依次匹配下一个字符elsej = next[j];}if (j > T.length)return i - T.length; //匹配成功elsereturn 0;
}int main()
{}

同样的,我们不采用引用,我们也还可以采用地址传值,将其定义Get_next的抬头改为:

void Get_next(SString T, int *next)

程序即可成功正确运行:(完整程序如下)

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit
#include<math.h>//OVERFLOW,exittypedef int Status;
#define MAXLEN 255struct SString//Sequence String
{char ch[MAXLEN + 1]; //存储串的一维数组int length; //串的当前长度长度
};void Get_next(SString T, int *next)
//给你一个子串T,教你逐个算出每个位序对应的next[]
{int j = 0,//从头开始算起k = -1;next[0] = -1;//根据公式while (j <= T.length - 1)//因为位序从0(而非1)开始{if (k == -1 || T.ch[k] == T.ch[j]){j++;k++;next[j] = k;}elsek = next[k];}
}int Index_KMP(SString S, SString T, int pos)
{int next[MAXLEN];Get_next(T, next);int i = pos, j = 1;while (i <= S.length && j <= T.length){if (S.ch[i] == T.ch[j]){++i; ++j;}//主串和子串依次匹配下一个字符elsej = next[j];}if (j > T.length)return i - T.length; //匹配成功elsereturn 0;
}int main()
{}

为什么不能使用引用

其实原因我们可能意想不到,在前面的问题(1)当中其实就已经有能解释该现象原因的解答了:

数组不能采用引用格式来传值

根本不存在“元素都是引用的数组”:

本身数组就是用他的首地址来传值的,其首地址代表一大串数组的信息和地址(位置)

而引用传值只是给变量取了一个别名来传值,自然不能(无法)传递整个数组的值

所以只要我们不用引用传数组,自然不会出问题

然而的虽然得到了标准答案,我们还有新的问题没有解决:


(4):传值问题(小结)

 根据同学提醒,这里其实我们很有必要举一反三,重新温习一下

如果想要通过调用函数功能传达改变的值,除了数组以外的变量,不要用形参实参传值

否则会产生最后数值没变的结果


(5):为什么地址(指针)传值的时候及调用函数的时候不能写next[]

next 既代表整个数组,也代表这个数组的头指针


地址传值:

next 前面已经加了 * 符号,再加 [ ]  就相当于要求接收**next类型的实参数据了,显然不符合我们的出发点


调用函数:

这方面其实我也不是很确定:

显然从设计程序的角度而言,我们清楚地知道这个位置需要的是一个数组的首地址,也就是这个数组的头指针

(我觉得)因为next[]无法代表这个数组的首地址,而直接写数组的名称next肯定是鞥狗代表整个数组(也包括首地址)的

另外,我觉得一定要写出next[]形式的首地址的话,其形式效果相当于:&next[0]


(6):调用Get_next函数是否必要

理论上应该是没有调用数据就传不进去,具体有待验证

(7):else语句当中BF算法的语句是什么?

k--?

待解决


PART 2:关于nextval[ j ]

以后再写,答案:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit
#include<math.h>//OVERFLOW,exittypedef int Status;
#define MAXLEN 255struct SString//Sequence String
{char ch[MAXLEN + 1]; //存储串的一维数组int length; //串的当前长度长度
};void Get_nextval(SString T, int nextval[])
//给你一个子串T,教你逐个算出每个位序对应的next[]
{int j = 0,//从头开始算起k = -1;nextval[0] = -1;//根据公式while (j <= T.length){if (k == -1 || T.ch[k] == T.ch[j]){j++;k++;if (T.ch[k] != T.ch[j])nextval[j] = k;elsenextval[j] = nextval[k];}elsek = nextval[k];}
}int Index_KMP(SString S, SString T, int pos)
{int nextval[MAXLEN];Get_nextval(T, nextval);int i = pos, j = 1;while (i <= S.length && j <= T.length){if (S.ch[i] == T.ch[j]){++i; ++j;}//主串和子串依次匹配下一个字符elsej = nextval[j];}if (j > T.length)return i - T.length; //匹配成功elsereturn false;
}int main()
{} 

http://www.bjxfkj.com.cn/article/104916.html

相关文章:

  • 网站开发助理是什么网络营销软文
  • 企业网站管理系统的运维服务找文网客服联系方式
  • vps做网站需要做哪些准备在线之家
  • 怎么在网上找接单做网站的公司企业seo排名优化
  • 澳门温州seo结算
  • 协会网站建站企业推广策划书
  • 生道网站建设平台创意设计
  • 去什么网站发贴做推广免费ip地址网站
  • 如何建设网站凤凰网全国疫情实时动态
  • 电子商务网站开发技术的背景bt磁力种子
  • 网页设计的就业和发展前景搜索引擎优化论文
  • 建立门户网站的程序广告免费推广网
  • 通用wap网站生成系统现在做百度快速收录的方法
  • 如果一个网站的域名是口碑营销成功案例简短
  • 慈溪做无痛同济&网站宝鸡网站开发公司
  • wordpress浮动快捷关键词优化网站排名
  • python做网站的好处seo 工具推荐
  • 自己做的网站被篡改怎么办小说推广平台有哪些
  • 网站空间选择坚决把快准严细实要求落实到位
  • wordpress笑话主题seo外链发布
  • 深圳 企业网站建设跟我学seo
  • 百度的网站关键词被篡改黄页污水
  • 新河网站西安网络推广公司
  • 厦门专业网站设计公司谷歌seo搜索引擎下载
  • 域名解析网站什么意思如何找外包的销售团队
  • 南京做网站优化关键词
  • 网站建设平台加盟搜索引擎有哪几个网站
  • 曹妃甸建设局网站详细的营销推广方案
  • 兰州道路建设情况网站网页制作软件手机版
  • 学信网 的企业网站给你做认证百度工具