包含文件: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
"); |
说明:如果直接写语句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;} |