问答题 设s、t为两个字符串,分别放在两个一维数组中,m、n分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出0。(注:用程序实现。)【中科院研究生院2003九(15分)】【南京航空航天大学1997九(10分)】
【正确答案】正确答案:判断字符串t是否是字符串S的子串,称为串的模式匹配,其基本思想是对串S和t各设一个指针i和j,i的值域是0..m一n,J的值域是0.n一1。初始值i和j均为0。模式匹配从s 0 和t 0 开始,若s 0 =t 0 ,则i和j指针增加1,若在某个位置s i !=t j ,则主串指针i回溯到i=j+1,j仍从0开始,进行下一轮的比较,直到匹配成功j>n—1),返回子串在主串的位置(i-j)。 否则,当i>m一n则为匹配失败。核心语句段如下: while(i<=m—n&&J<=n一1) //初值i=0,j=0;主串s,子串t,m和n分别是其长度 if(s[i]==t[j]){i++;j++;) //对应字符相等,指针后移 else{i=i—J+1; j=0;} //对应字符不相等,i回溯,j仍为0 if(i<=m—n&&J==n){cout<
【答案解析】