如下: 函数名: strstr 功能: 在字符串中查找指定字符串的第一次出现 用法: char strstr(char str1, char str2); strstr原型:extern char strstr(char haystack, char needle); 头文件:#include <stringh> 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。 编辑本段函数原型 1Copyright 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; } 2Copyright 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; } 编辑本段举例 // strstrc #include <syslibh> #include <stringh> main() { char s="Golden Global View"; char l="lob"; char p; clrscr(); p=strstr(s,l); if(p) printf("%s",p); else printf("Not Found!"); getchar(); return 0; } 语法: strstr(str1,str2) str1: 被查找目标 string expression to search str2:要查找对象 The string expression to find 该函数返回str2第一次在str1中的位置,如果没有找到,返回NULL The strstr() function returns the ordinal position within str1 of the first occurrence of str2 If str2 is not found in str1, strstr() returns 0 例子: 功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy” (假设xxx和yyy都是一个未知的字串) char s=” string1 onexxx string2 oneyyy”; char p; p=strstr(s,”string2”); if(p==NULL) printf(“Not Found!”); p=strstr(p,”one”); if(p==NULL) printf(“Not Found!”); p+=strlen(“one”); printf(“%s”,p); 说明:如果直接写语句p=strstr(s,”one”),则找到的是onexxx string2 oneyyy,不符合要求 所以需采用二次查找法找到目标
标准C语言实现下列标准库函数,设计中不得使用其他库函数。
strstr库函数:
char
strstr(char
str1,char
str2);
在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。
#include
<iostream>
char
strstr(const
char
str1,
const
char
str2);
char
strstr(const
char
str1,
const
char
str2)
{
char
s1,
s2;
assert
((str1
!=
(char
)0)
&&
(str2
!=
(char
)0));
/
空字符串是任务字符串的子字符串
/
if
(''
==
str2)
{
return
((char
)str1);
}
while
(str1)
{
s1
=
(char
)str1;
s2
=
(char
)str2;
while
((s1
==
s2)
&&
s1
&&
s2)
{
s1++;
s2++;
}
if
(''
==
s2)
{
return
((char
)str1);
}
str1++;
}
/
查找不成功,返回NULL
/
return
((char
)0);
}
int
main(int
argc,char
argv[])
{
char
a[20]="abcde";
char
b[20]="bc";
printf("%s
",
strstr(a,b));
system
("pause");
return
0;
}
strrpl库函数:
/
把
s
中的字符串
s1
替换成
s2
/
char
strrpl(char
s,
const
char
s1,
const
char
s2)
{
char
ptr;
while
(ptr
=
strstr(s,
s1))
/
如果在s中找到s1
/
{
memmove(ptr
+
strlen(s2)
,
ptr
+
strlen(s1),
strlen(ptr)
-
strlen(s1)
+
1);
memcpy(ptr,
&s2[0],
strlen(s2));
}
return
s;
}
包含文件:stringh
函数名: 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
函数实现
1Copyright 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;
}
2Copyright 1986 - 1999 IAR Systems All rights reserved
char strstr(constchars1,constchars2)
{
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-480
char strstr(const chars1,const chars2)
{
const charp=s1;
const size_tlen=strlen(s2);
for(;(p=strchr(p,s2))!=0;p++)
{
if(strncmp(p,s2,len)==0)
return (char)p;
}
return(0);
}
应用举例
// strstrc
#include <syslibh>
#include <stringh>
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(chars1,chars2)
{
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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)