strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。
该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。
语法
1
|
strstr
(string,search)
|
参数
|
描述
|
---|---|
string
|
必需。规定被搜索的字符串。
|
search
|
必需。规定所搜索的字符串。
|
提示
注释:
search若是数字,所搜索的将是该数字(作为ASCII码)代表的字符。
注释:该函数是二进制安全的。
注释:该函数对大小写敏感。如需进行大小写不敏感的搜索,请使用 stristr()。
实例
1
|
<?php
echo
strstr
(
"Helloworld!"
,
"world"
);?>
|
输出:
1
|
world!
|
包含文件:
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;
}
|