原型: char *strstr(const char *str1, const char *str2);
成都创新互联是一家集网站建设,延川企业网站建设,延川品牌网站建设,网站定制,延川网站建设报价,网络营销,网络优化,延川网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
#includestring.h
找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。
Returns a pointer to the first occurrence of strSearch in str, or NULL if strSearch does not appear in str. IfstrSearch points to a string of zero length, the function returns str.
代码如下:
#include stdio.h
#include conio.h
#include string.h
#include stdlib.h
#pragma warning (disable:4996)
char *mystrstr(char *s1,char *s2);
int main(void)
{
char *s="Golden Global View";
char *l="ob"; //char *l=""
char *p;
system("cls");
p=mystrstr(s,l);
if (p!=NULL)
{
printf("%sn",p);
}
else
{
printf("Not Found!n");
}
getch();
return 0;
}
/*FROM 百科*/
char *mystrstr(char *s1,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;
}
}
另一个实现:
代码如下:
char * strstr (buf, sub)
register char *buf;
register char *sub;
{
register char *bp;
register char *sp;
if (!*sub)
return buf;
while (*buf)
{
bp = buf;
sp = sub;
do {
if (!*sp)
return buf;
} while (*bp++ == *sp++);
buf += 1;
}
return 0;
}
又一个实现:
代码如下:
#include iostream
#include string
using namespace std;
//c语言实现strstr
const char* isSub(const char* str, const char *subs){
//特殊情况
if(!*subs)
return str;
const char* tmp=str;
while (*tmp!='')
{
//用于每次将父串向后移动一个字符
const char* tmp1=tmp;
//记录子串地址
const char* sub1=subs;
while (*sub1!=''*tmp1!='')
{
//若不相等则跳出,将父串后移一个字符
if (*sub1!=*tmp1)
break;
//若相等且子串下一个字符是末尾则是这个父串的子串
if (*sub1==*tmp1*(sub1+1)=='')
return tmp;
//若相等则继续比较下一个字符
if (*sub1==*tmp1)
{
sub1++;
tmp1++;
}
}
tmp++;
}
return NULL;
}
int main(){
char* str1="ababcdddb";
char* str="";
const char *res=isSub(str1,str);
if (res!=NULL)
{
cout res endl;
}
else
cout "null" endl;
//cout isSub(str1,str) endl;
return 0;
}
1万字也都输出,控制办法是将某个位置置为字符串结束符‘\0'。
#include stdio.h
#include string.h
void main()
{
char a[]="我我我我哦我哦喔喔喔we喔我哦我我我我我我我我哦我我我为我我";
char *b="we";
char *p = strstr(a, b);
printf( "%s",p ); // 这里输出"we喔我哦我我我我我我我我哦我我我为我我",有1万字也输出,除非遇见字符串结束符'\0'。
p[10] = '\0';
printf( "%d",p ); // 这里就只输出"we喔我哦我"了,因为p[10]被设置为结束符0了。
}
用strstr这个函数
包含文件:string.h
函数名: strstr
函数原型:extern char *strstr(char *str1, char *str2);
功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。
返回值:返回该位置的指针,如找不到,返回空指针。
思路:
从第一个字符串的第一位开始查找符合第二个字符串第一位的数据,如果找到,设定开始位置(记下来)
则循环判断是否符合下一位的数据,如果出现不符合,则回到原记录位置,重新查找符合第二个字符串的第一个位置的数据,如果找到,则。。。。循环前面一步的操作
如果完全符合,即第二个字符串遍历结束,则返回记录的位置
如此,你分析一下就可以得到一个嵌套循环的查找了
标准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;
}
char
*strchr(char
*str,
char
c);
在一个串中查找给定字符的第一个匹配之处
char
*strstr(char
*str1,
char
*str2);
在串中查找指定字符串的第一次出现
区别就是一个是招字符,一个是找字符串
#include
string.h
#include
stdio.h
int
main(void)
{
char
string[15];
char
*ptr,
c
=
'r';
strcpy(string,
"This
is
a
string");
ptr
=
strchr(string,
c);
if
(ptr)
printf("The
character
%c
is
at
position:
%d\n",
c,
ptr-string);
else
printf("The
character
was
not
found\n");
return
0;
}
#include
stdio.h
#include
string.h
int
main(void)
{
char
*str1
=
"Borland
International",
*str2
=
"nation",
*ptr;
ptr
=
strstr(str1,
str2);
printf("The
substring
is:
%s\n",
ptr);
return
0;
}