函数名: strstr
函数原型:
extern char *strstr(char *str1, const char *str2)
语法:* strstr(str1,str2)
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例子:
char str[]="1234xyz"
char *str1=strstr(str,"34")
cout <<str1 <<endl
显示的是: 34xyz
函数实现
1.Copyright 1990 Software Development Systems, Inc.
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
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
char *strstr(const char*s1,const char*s2)
{
const char*p=s1
const size_tlen=strlen(s2)
for((p=strchr(p,*s2))!=0p++)
{
if(strncmp(p,s2,len)==0)
return (char*)p
}
return(0)
}
应用举例
// strstr.c
#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都是一个未知的字串)
char *s=”string1onexxxstring2oneyyy”
char *p
p=strstr(s,”yyy”)
if(p!=NULL)
printf(“%s”,p)
else
printf("notfound\n")
说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
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
}
第一空填:argv[1] //文件名以字符指针的形式存在argv[1]中第二空填:fscanf(fp,"%s\n",str)//读取一行的字符串,存到str这个字符数组中去
第三空填:fclose(fp) //关闭文件