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);
}
posted @ 2012-12-06 13:02  helloweworld  阅读(757)  评论(0编辑  收藏  举报