C++这题怎么做?求教......
1、 编写一个函数,实现子串查找功能。要求返回:(1)第一个匹配的子串在目标串中的位置;(2)指向第一个匹配子串首字符的指针。(1)、定义该函数原型。
(2)、实现该函数。
程序代码:#include<iostream>
using namespace std;
char * strstr_(const char * src, const char * dest);
int main(void)
{
const char src[] = "this is a test";
const char dest[] = "test";
char *s = strstr_(src,dest);
cout<<s<<endl;
// delete s; //这里为什么会报错呢 求解答
return 0;
}
char * strstr_(const char * src, const char * dest)
{
char * s1 = new char;
char * s2 = new char;
strcpy(s1,src);
strcpy(s2,dest);
if (s1==NULL || s2==NULL)
{
return NULL;
}
else if (strlen(s2) > strlen(s1))
{
return NULL;
}
else if (strlen(s2) == strlen(s1))
{
return s1;
}
else
{
int len=strlen(s1)-strlen(s2)+1;
for (int i=0; i<len; ++i)
{
if (*s1 == *s2)
{
int j=0;
for (; j<strlen(s2); ++j)
{
if (*(s1+j) != *(s2+j))
{
break;
}
}
if (j == strlen(s2))
{
return s1;
}
}
s1+=1;
}
return NULL;
}
}

程序代码:1.Copyright 1990 Software Development Systems, Inc.
char *strstr( const char *s1, const char *s2 )
{
int len2;
if ( !(len2 = strlen(s2)) )
return (char *)s1;
for ( ; *s1; ++s1 )
{
if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
return (char *)s1;
}
return NULL;
}
2.Copyright 1986 - 1999 IAR Systems. All rights reserved
char *strstr(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;
}
