实现strrstr,找到子串最后的出现位置

简介: 实现strrstr,找到子串最后的出现位置

思路:使用strstr,从左向右依次查找,找到最后出现的那个。从右向左找也行(也许更快),实现起来比较麻烦,没有这个易懂。


#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
char* taishan_strrstr(const char *pSrc, const char* pSub)
{
    assert(pSrc);
    assert(pSub);
    char* pLastFound = NULL;
    char* pTemp      = (char*)pSrc;
    int   nSubLen    = strlen(pSub);
    if(   pSrc == NULL || pSrc[0] == 0
       || pSub == NULL || pSub[0] == 0)
    {
        return NULL;
    }
    while (pTemp)
    {
        pTemp = strstr(pTemp, pSub);
        if (!pTemp)
        {
            break;
        }
        pLastFound  = pTemp;
        pTemp      += nSubLen;
    }
    return pLastFound;
}
int main()
{
    const char* pSrc   = "Taishan Office, Tai'an";
    const char* pSub   = "Tai";
          char* pRight = taishan_strrstr(pSrc, pSub);
    printf("right found=%s\n", pRight);
    return 0;
}

目录
相关文章
|
6月前
|
存储 算法 C语言
找到数组位置
找到数组位置
|
3月前
|
存储 算法 索引
|
13天前
|
索引
查找字符在字符串中的起始位置
【10月更文挑战第32天】查找字符在字符串中的起始位置
19 0
|
3月前
|
算法 Java
LeetCode第28题找出字符串中第一个匹配项的下标
这篇文章介绍了LeetCode第28题"找出字符串中第一个匹配项的下标"的两种解法:暴力解法和KMP算法,并解释了KMP算法通过构建前缀表来提高字符串搜索的效率。
LeetCode第28题找出字符串中第一个匹配项的下标
|
3月前
|
索引
【面试题】串联所有单词的子串,找到所有符合条件的串联子串的起始索引
【面试题】串联所有单词的子串,找到所有符合条件的串联子串的起始索引
46 0
|
5月前
leetcode题解:28.找出字符串中第一个匹配项的下标
leetcode题解:28.找出字符串中第一个匹配项的下标
26 0
|
6月前
【力扣】28. 找出字符串中第一个匹配项的下标
【力扣】28. 找出字符串中第一个匹配项的下标
|
6月前
|
Java
【剑指offer】- 第一个只出现一次的字符位置-34/67
【剑指offer】- 第一个只出现一次的字符位置-34/67
|
算法
每日一题——找出字符串中第一个匹配项的下标(实现strStr)(暴力解法)
每日一题——找出字符串中第一个匹配项的下标(实现strStr)(暴力解法)
|
算法
LeetCode:28. 找出字符串中第一个匹配项的下标
题目描述:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。