strstr函数的学习

一.strstr函数的概念

定义:

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。

所以strstr函数可以用来

1.分割字符串;

2.通过查找子串进行删除,修改等等一些列操作。

二.

代码的实现:

题目:

1.

strstr函数的学习_第1张图片

通过strstr函数便可以快速实现:

源代码


#include
#include
main()
{
char a[99],b[99],c[99];
int i,j,n;
gets(a);
gets(b);
char *p;
while((p=strstr(a,b))!='\0')//使用while循环可以保证就算出现多次以上也可完全删除
{
*p='\0';//如果不使用就会无法运行 将p所指向的strstr字符串首地址后,使用’\0’分割原本的字符串 字符串后如果不加’\0’,则会指向内存中的下一个’\0’,导致越界
strcat(a,p+strlen(b)); //p+strlen(b),使指针p指向该字符串地址后所要删除的长度的地址
}
puts(a);
}

2.strstr实现分割字符串

#include 
#include  
 
int main(int argc,char **argv)  
 {
 char a[]="aaa||a||bbb||c||ee||";
 char *needle="||";
 
 char *haystack=a;     
 char* buf = strstr( haystack, needle);
 while( buf != NULL )    {
      buf[0]='\0';        //在出现分隔符的位置设置结束符\0,与上一个一样,目的就是断开
      printf( "%s\n", haystack);
      haystack = buf + strlen(needle);
      buf = strstr( haystack, needle);
     }
 
     return 0;
}

输出结果:

aaa
a
bbb
c
ee

这就是strstr函数的用法,以后可能有补充。

三.不使用strstr()确实是否为子串

思考:

是子串就flag为1,不是为-1。每次循环的条件都是a[i] == b[0],就是要和字串的第一个一样才有进入循环判断其他字符的资格,进入循环后for(j = 1; j < m; j++)就行了如果b[j] != a[i+j],那么flag = 0 break;后面在第一个循环中如果flag为1那么再次break最后输出结果就行了。

#include 
#include 
main() {
 char a[99], b[99];
 int i, j, flag = 0;
 gets(a);
 gets(b);
 int n, m;
 n = strlen(a);
 m = strlen(b);
 for(i = 0; i < n; i++){
  if(a[i] == b[0]){
   for(j = 1; j < m; j++){
    if(b[j] == a[i + j]){
     flag = 1;
    }
	else{
     flag = 0;
     break;
    }
   }
  }
  if(flag == 1){
   break;
  }
 }
 if(flag == 1)
 printf("YES");
 else
 printf("NO");
}

 


你可能感兴趣的:(strstr函数的学习)