//
//
#include <iostream>
#include <assert.h>
#include <algorithm>
#include <hash_set>
#include <vector>
#include <assert.h>
using namespace std;
const char *findstr(const char *src, const char *need)
{
assert(NULL != src && NULL != need);
int m=strlen(src);
int n=strlen(need);
if(m<n)
return NULL;
int i,j;
for (i=0; i<m-n+1; i++)
{
j=0;
int t=i;
while (src[i] == need[j] && j<n)
{
i++;
j++;
}
if (j==n)
{
return src+t;
}
}
return NULL;
}
const char *findstr2(const char *src, const char *need)
{
assert(NULL != src && NULL != need);
const char *p1=src;
const char *p2=need;
const char *pt=p2;
int n=0;
while (*pt!='\0')
{
n++;
pt++;
}
while (*(p1+n-1)!='\0')
{
pt=p1;
const char *pt2=p2;
while (*pt==*pt2)
{
pt++;
pt2++;
}
if (*pt2=='\0')
{
return p1;
}
p1++;
}
return NULL;
}
int main()
{
char str1[]="abcdefg";
char str2[]="cde";
char str3[]="cdh";
cout<<str1<<endl;
cout<<str2<<endl;
cout<<"findstr: "<<findstr(str1,str2)<<endl;
cout<<"strstr: "<<strstr(str1,str2)<<endl;
cout<<"findstr2: "<<findstr2(str1,str2)<<endl;
cout<<endl;
cout<<str1<<endl;
cout<<str3<<endl;
cout<<"findstr: "<< (findstr(str1,str3)==NULL?"NULL":findstr(str1,str3))<<endl;
cout<<"strstr: "<< (strstr(str1,str3)==NULL?"NULL":strstr(str1,str3))<<endl;
cout<<"findstr2: "<< (findstr2(str1,str3)==NULL?"NULL":findstr2(str1,str3))<<endl;
return 0;
}