包含文件:string.h
函数名: strstr
函数原型:
1
|
extern char * strstr ( char *str1, const char *str2);
|
语法:
1
|
* strstr (str1,str2)
|
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例子:
1
2
3
|
char str[]= "1234xyz" ;
char *str1= strstr (str, "34" );
cout << str1 << endl; |
显示的是: 34xyz
函数实现
1.Copyright 1990 Software Development Systems, Inc.
1
2
3
4
5
6
7
8
9
10
11
12
|
char * strstr ( const char *s1, const char *s2)
{ int len2;
if (!(len2= strlen (s2))) //此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
char * strstr (constchar*s1,constchar*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;
} |
3. GCC-4.8.0
1
2
3
4
5
6
7
8
9
10
11
|
char * strstr ( const char *s1, const char *s2)
{ const char *p=s1;
const size_tlen= strlen (s2);
for (;(p= strchr (p,*s2))!=0;p++)
{
if ( strncmp (p,s2,len)==0)
return ( char *)p;
}
return (0);
} |
应用举例
// strstr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <syslib.h> #include <string.h> main() { char *s= "GoldenGlobalView" ;
char *l= "lob" ;
char *p;
clrscr();
p= strstr (s,l);
if (p)
printf ( "%s" ,p);
else
printf ( "NotFound!" );
getchar ();
return0;
} |
//功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy”
(假设xxx和yyy都是一个未知的字串)
1
2
3
4
5
6
7
|
char *s=”string1onexxxstring2oneyyy”;
char *p;
p= strstr (s,”yyy”);
if (p!=NULL)
printf (“%s”,p);
else printf ( "notfound\n" );
|
说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
char *mystrstr( char *s1, char *s2)
{ if (*s1==0)
{
if (*s2)
return ( char *)NULL;
return ( char *)s1;
}
while (*s1)
{
int i=0;
while (1)
{
if (s2[i]==0)
return s1;
if (s2[i]!=s1[i])
break ;
i++;
}
s1++;
}
return ( char *)NULL;
} |