strstr関数の学習

1.strstr関数の概念

定義:

strstr(str1、str2)関数は、文字列str2がstr1のサブ文字列であるかどうかを判別するために使用されます。そうである場合、関数はstr2の最初の出現からstr1の終わりまでの文字列を返します。そうでない場合、関数はNULLを返します。

したがって、strstr関数を使用できます

1.文字列を分割します。

2.サブストリングを検索して、削除、変更、およびその他の操作を行います。

二。

コードの実装:

トピック:

1.1。

これは、strstr関数を使用してすばやく実行できます。

ソースコード


#include<stdio.h>
#include<string.h>
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 <string.h>
#include <stdio.h> 
 
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関数の使用法であり、将来追加される可能性があります。

3. strstr()を使用しないのは確かにサブストリングです

考え:

サブストリングの場合、フラグは-1ではなく1です。各ループの条件はa [i] == b [0]です。つまり、他の文字を判断するためにループに入る資格を得るには、文字列の最初のループと同じである必要があります。ループに入った後、for(j = 1; j <m ; j ++)で十分です。b[j]!= a [i + j]の場合、flag = 0 break;最初のループでflagが1の場合、再度中断し、最後に結果を出力します。

#include <stdio.h>
#include <string.h>
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");
}

 


おすすめ

転載: blog.csdn.net/m0_46110288/article/details/105759082
おすすめ