strstr 的实现 即 字符串中查找子字符串第一次出现的位置

/***

*char *strstr(string1, string2) - search for string2 in string1

*

*Purpose:

*       finds the first occurrence of string2 in string1

*

*Entry:

*       char *string1 - string to search in

*       char *string2 - string to search for

*

*Exit:

*       returns a pointer to the first occurrence of string2 in

*       string1, or NULL if string2 does not occur in string1

*

*Uses:

*

*Exceptions:

*

*******************************************************************************/



char * __cdecl strstr (

        const char * str1,

        const char * str2

        )

{

        char *cp = (char *) str1;

        char *s1, *s2;



        if ( !*str2 )

            return((char *)str1);



        while (*cp)

        {

                s1 = cp;

                s2 = (char *) str2;



                while ( *s1 && *s2 && !(*s1-*s2) )

                        s1++, s2++;



                if (!*s2)

                        return(cp);



                cp++;

        }



        return(NULL);



}

 

 

 

 

/*同时,自己写的,朴素的查找子串算法*/

#include <iostream>

#include <stdio.h>

using namespace std;



char *mystrstr(char *string, char *substring)

{

	char *pstr = string;

	char *tmpstr, *psub;



	//外循环是主串不到末尾则一直do

	while (*pstr) {

		tmpstr = pstr;

		psub = substring;



		//从主串的某个位置开始,判断其后的字符串是否为子串。

		while (*tmpstr && *psub && !(*tmpstr - *psub)) {

			tmpstr++;

			psub++;

		}



		if (!(*psub)) {

			return pstr;

		}



		//主串对比位置后移一个字符。

		pstr++;

	}



	return NULL;

}



int main()

{

	char s1[20] = "helloworld";

	char s2[10] = "wo";

	cout << mystrstr(s1, s2);

}

你可能感兴趣的:(字符串)