一、strstr和strchr的区别:
strstr是求子字符串在另一字符串中首次出现的位置,
strchr是求的单个字符在另一字符串中首次出现的位置;
二、举个例子:
//1.strstr在某个字符中查找另一字符串首次出现的位置,并返回从当前位置开始的字符串
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int strstr1(char*p1,char*p2)
{
int ret=0;
if( p1 == NULL|| p2 == NULL)
{
ret=-1;
printf("func strstr1 err:( p1 == NULL|| p2 == NULL)",ret );
return ret;
}
}
void main()
{
char *p1="abcdabcdabcd1111defghijabcd";
char *p2=NULL;
p2=strstr(p1,"1111");//在p1中查找"1111"字符串
if(p2 == NULL)
{
printf("没找到!!");
}
else
{
printf("找到,p2:%s\n",p2);
}
system("pause");
}
1,使用do … while()实现
//查找子串在某个字符串中出现的次数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
/*char *sub="abcd";*/ //第一次测试
char *sub="cdc";//第二次测试
int count =0;
char *p="abcdabcdabcd1111defghijabcd";
do{
p=strstr(p,sub);
if(p!=NULL)
{
count++;
p=p+strlen(sub);
}
else
{
break;
}
}while(*p!='\0');
printf("子串出现的次数为%d\n",count);
system("pause");
}
2,使用while实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int count=0;
char*p1="abcdefghijklmnabcdabcdcdabcd";
char*p2="abcd";
while(p1=strstr(p1,p2))
{
count++;
p1=p1+strlen(p2);
if(*p1=='\0')
{
break;
}
}
printf("子串出现的次数为%d\n",count);
system("pause");
}
作为一个优秀的程序员,是不会将功能的实现放在主调函数内部的,那么,我们来将上述过程封装成一个函数,利用函数的接口来实现相应的功能;
3,封装函数实现,为外界提供接口
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int getcount(char* p1,char*p2, int* count)
{
int ret=0;
if(p1==NULL||p2==NULL)
{
ret=-1;
printf("func getcount err:(p==NULL||sub==NULL),%d",ret);
}
while(p1=strstr(p1,p2))
{
/**count= *count+1;*/
(*count)++;//注意:*和++的优先级问题
p1=p1+strlen(p2);
if(*p1=='\0')
{
break;
}
}
return 0;
}
void main()
{
char *sub="da";//求字符串da在p1中出现的次数
int count =0;
char *p="abcdabcdabcd1111defghijabcd";
char *p2=NULL;
getcount(p,sub, &count);
printf("子串出现的次数为%d\n",count);
system("pause");
}
三、总结:
在实际工程应用中, 经常会用到strstr,又strstr可以引申出很多问题, 比如本文中的求某一子字符串在另一字符串中的次数,查找到子串后,将其替换为其它字符等,由此可见,熟练掌握并应用其显得十分重要。