strstr实现

// strstr.c查找完全匹配的子字符串
#include<stdio.h>
#include<string.h>

char *my_strstr(const char *s1,const char *s2)
{
    const char *p=s1;
    const int len=strlen(s2);
    for(;(p=strchr(p,*s2))!=0;p++)
    {
        if(strncmp(p,s2,len)==0)
        return(char *)p;
    }
    return (0);
}

char *my_strstr1(const char *s1, const char *s2)
{
    int n;
    if (*s2)
    {
        while (*s1)
        {
            for (n=0; *(s1 + n) == *(s2 + n); n++)
            {
                if (!*(s2 + n + 1))
                return (char *)s1;
            }
            s1++;
        }
        return NULL;
    }
    else
    return (char *)s1;
}

char *my_strstr2( const char *s1, const char *s2 )
{
    int len2;
    if ( !(len2 = strlen(s2)) )//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
        return (char *)s1;
    for ( ; *s1; ++s1 )
    {
        if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
        return (char *)s1;
    }
    return NULL;
}

int main()
{
    char *s="Golden Global View";
    char *l="lob";
    char *p;
    //p=strstr(s,l);
    //p=my_strstr(s,l);
    p=my_strstr(s,l);
    if(p)
        printf("s=%s,p=%s\n",s,p);
    else
        printf("Not Found!\n");

    {
        char * rmlst = "ppp3.3/222.222.222.222";
        char * cp1=NULL,* ipintf=NULL,*pubAddr=NULL;
        cp1 = strstr(rmlst, "/");
        if ( cp1 == NULL )
           return;
/*
        *cp1 = ‘\0‘;
        strncpy(ipintf, rmlst, cp1-rmlst);
        strcpy(pubAddr, cp1+1);
*/
        printf("~~~~~~~~~~~,rmlst=%s,ipintf=%s,pubAddr=%s,cp1+1=%s\n\n\n\n", rmlst,ipintf,pubAddr,cp1+1);
    }

    getchar();
    return 0;
}
时间: 2024-10-27 00:09:24

strstr实现的相关文章

LeetCode 28. Implement strStr()

https://leetcode.com/problems/implement-strstr/ Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 字符串简单题.一定要写的没BUG. 如果不在函数最后一行写return语句的话,LeetCode会出RUNTIME ERROR. Line 27: co

Implement strStr()

package cn.edu.xidian.sselab.string; /** *  * @author zhiyong wang * title: Implement strStr() * content: *  Implement strStr(). *   *  Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.  * */pub

【LeetCode】Implement strStr()

Implement strStr() Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 标准KMP算法.可参考下文. http://blog.csdn.net/yaochunnian/article/details/7059486 核心思想在于求出模式串前缀与后缀中重复部分,将重复信息保存在n

刷题之Implement strStr()

1 public class Solution { 2 public int strStr(String haystack, String needle) { 3 int big = haystack.length(); 4 int sub = needle.length(); 5 if(big==0 && sub==0) return 0; 6 if(big==0 && sub!=0) return -1; 7 int index = big-sub; 8 for(int

strstr函数

语法 strstr(string,search,before_search) 参数解析 参数 描述 string 必需.规定被搜索的字符串. search 必需.规定所搜索的字符串. 如果此参数是数字,则搜索匹配此数字对应的 ASCII 值的字符. before_search 可选.默认值为 "false" 的布尔值. 如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分. 示例 <?php     echo strstr(&quo

C 函数 strstr 的高效实现

      C函数库中有一个函数 strstr(char*, char*),它实现的是在一个原字符串中查找一个子串.假设找到这种一个子串,返回这个子串在原字符串中的起始位置,若没有找到这种一个子串.则返回NULL.       可是,函数库中实现的仅是普通情况下的查找.即没有做太多优化,在运行一些特殊的字符串时效率非常低,所以,在非常多面试中要求改进这个算法,实现效率高的 strstr 算法,这里,我对原算法进行几处修改.在对某些特殊測试用例时.运行效率确实比原算法高出很多,这里,贴出实现代码.

leetcode implement strStr python

#kmp class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ if len(haystack) <= 0 and len(needle)<=0: return 0 arrNext=self.getNext(needle) i=0 j=0 intHLen=

从C++strStr到字符串匹配算法

字符串的匹配先定义两个名词:模式串和文本串.我们的任务就是在文本串中找到模式串第一次出现的位置,如果找到就返回位置的下标,如果没有找到返回-1.其实这就是C++语言里面的一个函数: extern char *strstr(char *str1, const char *str2); 对于这个函数的解释: str1: 被查找目标 str2: 要查找对象 返回值:如果str2是str1的子串,则返回str2在str1的首次出现的地址: 如果str2不是str1的子串,则返回NULL. 例如: cha

【HDOJ 4763】 Theme Section (KMP+strstr)

[HDOJ 4763] Theme Section Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1999    Accepted Submission(s): 947 Problem Description It's time for music! A lot of popular musicians a

【leetcode】Implement strStr() (easy)

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 思路: 注意,在for循环中条件有计算得到的负数时, 一定要把计算括起来转换为int, 否则会默认转换为uchar 负数就会被误认为是一个很大的数字. for(int i = 0; i < int(1 - 2); ++i) 实现很常规: int s