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");
}