//
// main.c
// strstr
//
// Created by lichan on 13-11-20.
// Copyright (c) 2013年 com.lichan. All rights reserved.
//
#include <stdio.h>
#include <string.h>
char * mystrstr (const char * str1,const char * str2)
{
char *cp = (char *) str1;//因为 str1 为不可变量,需要转换成可变的cp变量.
int length = (int)strlen(str1);
char *s1, *s2;
if ( !*str2 ) //当str2 为空得时候, 直接 把 str1 输出.
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) ) //判断是否有相等的字符. !(*s1 - *s2)==1 表示相等,如果==0 表示 不相等.
s1++, s2++;
if (!*s2)
{
int length2 = (int)strlen(cp);
printf("%d",(length - length2));
return(cp);
}
cp++;
}
return NULL;
}
int main(int argc, const char * argv[])
{
char *str1 ="lichan";
char *str2 = "cha";
printf("%s",mystrstr(str1, str2));
// insert code here...
printf("Hello, World!\n");
return 0;
}
不得不说,这种算法真心的很巧妙啊. 领教了
方法二: 确定位置:
int strfind(char *str1,char *str2)
{
int acount = mystrlen(str1);
int bcount = mystrlen(str2);
for (int i = 0; i < acount; i ++)
{
int equle = 1;
for (int j = 0; j < bcount; j++)
{
if (*(str1+i +j ) != *(str2 + j))
{
equle = 0;
break;
}
}
if (equle ==1)
{
return i+1 ;
}
}
return -1;
}
虽然时间复杂度大,但是也是一种算法.