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; }
else if (strlen(s2) == strlen(s1)) { return s1; }