这个编程怎么做啊??请强人告诉我思路~~~~~谢谢了

来源:百度知道 编辑:UC知道 时间:2024/07/06 23:57:30
♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡

下列给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如:字符串abcdabfabcdx,t中内容是ab时,输出结果应是abcdx

♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡

就是上面这道题,应该怎么思考啊,我完全一点头绪都没有,知道的朋友告诉我下,如果嫌麻烦可以不用把程序写出来,介绍下思路也可以!

fun函数中设置两个指针a,b分别接受主函数中abcdabfabcdx和t的地址,然后把指针a指向abcdabfabcdx的尾部某个位置(取决于t的长度,如t=ab,则a指针指向abcdabfabcdx的倒数第二个),用函数strcmp比较a,b,然后循环a指针减一直到比较值为0停止循环,返回a值,若a指向abcdabfabcdx首仍不为0,返回NULL

注意要对a指针根据t的长度补充'\0'的赋值,否则后面永远不为0

就是把正常的查找子串的程序中,从左到右遍历字符串改成从右到左

大概思路吧。。。

设定入参:
parString: 母串
subString: 子串

计算出:
parLen: 母串长度
subLen: 子串长度

从后匹配:
idx:int = parLen - 1; // 正在匹配的起始点
i:int = subLen - 1; // 匹配过程中,子串下标
j:int = parLen - 1; // 匹配过程中,母串下标

// 循环检测,如果待检测的长度小于子串长度,退出
while (idx < subLen) {
while (i>=0 && subString[i] == parString[j]){ // 从尾向首匹配
--i; --j; // 下标同时往前移动
}
if (i == -1) // 只有在完全匹配时,i才有可能=-1,所以return
return parString + idx - subLen; // 返回的是后匹配的母串位置,即匹配点-匹配长度(即子串长度)

i = subLen - 1; // 不匹配时,i置初始值为子串的尾位置
j = --idx; // 匹配点往前移动一位。。。
}

return NULL; // 找不到,返回NULL
}