实现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;
}
目录
相关文章
|
1月前
|
存储 算法 C语言
找到数组位置
找到数组位置
|
9天前
【力扣】28. 找出字符串中第一个匹配项的下标
【力扣】28. 找出字符串中第一个匹配项的下标
|
11天前
|
Java
给定一个字符串数组,如何找到其中最长的回文子串?
【4月更文挑战第13天】Java动态规划解题:找出字符串数组中最长的回文子串。代码中,`longestPalindrome`函数遍历数组,利用`expandAroundCenter`方法检测以每个字符为中心的回文串并更新最长长度。当遍历完所有字符串后,返回最长回文子串。
16 6
|
3月前
|
索引 Python C++
C/C++每日一练(20230418) 搜索插入位置、最长有效括号、子集
C/C++每日一练(20230418) 搜索插入位置、最长有效括号、子集
35 0
C/C++每日一练(20230418) 搜索插入位置、最长有效括号、子集
|
3月前
|
算法
leetcode-34:在排序数组中查找元素的第一个和最后一个位置
leetcode-34:在排序数组中查找元素的第一个和最后一个位置
17 0
|
4月前
|
Java
【剑指offer】- 第一个只出现一次的字符位置-34/67
【剑指offer】- 第一个只出现一次的字符位置-34/67
|
8月前
|
算法
LeetCode-34 在排序数组中查找元素的第一个和最后一个位置
LeetCode-34 在排序数组中查找元素的第一个和最后一个位置
|
算法
LeetCode:28. 找出字符串中第一个匹配项的下标
题目描述:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
|
算法 Java C语言
找出字符串中第一个匹配项的下标 (LeetCode 28)
找出字符串中第一个匹配项的下标 (LeetCode 28)
180 0
实现strrstr,找到子串最后的出现位置
实现strrstr,找到子串最后的出现位置
79 0