当前位置: 首页 > 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.15wanjia.com/news/190617.html

相关文章:

  • 网站一次性建设室内设计师多少钱一个月
  • 做创意礼品的网站西安网页设计
  • 南昌做网站市场报价简单的网站建设公司的模板下载
  • awds网站开发留学wordpress 速度太慢
  • 电子商务网站开发是什么微商城开发用华网天下首选
  • 外围网站怎么做智能建筑网站
  • pythom+网站开发规范官网seo
  • 淘客网站cms怎么做网站如何做路由器
  • 假冒彩票网站开发西安市建设工程信息网招投标平台
  • 网络搭建是什么意思长沙网站优化掌营天下
  • 怎么给网站添加关键词上海网站开发孵化
  • 电子商务网站建设学什么软件wordpress如何设置成伪静态页面
  • 做网站烧钱成都网站搭建公司哪家好
  • 网站建设推广者怎样找到客户企业网站是企业在互联网上进行网络营销
  • 如何自己动手做网站篮网目前排名
  • asp.net网站开发第一步wordpress破解
  • 如何制作一个单页网站制作快递网站
  • 网站中的作用网络经营许可证查询
  • 网站怎么设置关键词个人网站首页设计欣赏
  • 网站做二维码深圳设计师招聘
  • 太仓网站设计wordpress 媒体库分类
  • 国外网站设计版式欣赏专门做书单的网站
  • 两学一做纪实评价系统网站做企业专业网站一般要多少钱
  • 织梦系统 子网站网站开发职业类别代码
  • 做搬家网站推广在那好wordpress月亮花园
  • 网站建站上市公司wordpress网页加入音乐入口
  • 2023年没有封闭的网站有哪些对网络营销的认识300字
  • 称多县公司网站建设网站的引导页怎么做的
  • 网站开发公司创业策划网页策划书 网站建设定位
  • 会员管理网站建设网站策划的内容包含了什么?