• strstr函数的实现

本函数是用来判断字符串str2是否是str1的子串。如果是,则函数返回str2在str1中首次出现的的当前地址;否则,返回NULL。

代码模拟:

#include<stdio.h>//模拟实现strstr

#include<string.h>

int main()

{   char *my_strstr(char *str1,char *str2);

char *str1="she is a good teacher";

char *str2="good";

 printf("%s\n",my_strstr(str1,str2));

return 0;

}  

char *my_strstr(char *str1,char *str2)//返回指针的函数

{


int i,j;

int len1=strlen(str1),len2=strlen(str2);

for(i=0;i<len1-1;i++)

{

         for(j=0;j,j<len2-1;j++)

 if(str2[j]==str1[i])

 return &str1[i];

}

return NULL;//如果上述的if检测为0则可以执行到此步骤

}

代码结果:

wKioL1ZOxCLw6sP-AAAeRc2Xlkg069.png

  • strncat函数的实现

把str2所指字符串的前n个添加到字符串str1后,并在结尾处添加\0,

应该注意的是要保证str1有足够的空间能够容纳str2的前n个字符

代码模拟:


#include<stdio.h>//模拟实现strncat
int main()
{
void my_strncat(char *p1,char *p2,int n);
char str1[50]="what do you want to do?",str2[]="what are you doing?";//str1开辟了足够的空间
int n;
scanf("%d",&n);
my_strncat(str1,str2,n);
printf("%s\n",str1);
return 0;
}
void my_strncat(char *p1,char *p2,int n)
{  
     while(*p1!='\0')
  {
     p1++;
  }
  while(n>0)
  {
     *p1=*p2;
  n--;
  p1++;
  p2++;
  }
  *p1='\0';//最后将\0也拷贝到str1

}

代码结果:

wKioL1ZOySCTjCXYAAAkoT38mfc441.png



  • strcat函数的实现

该函数不同于strncat,stncatt是将str2中的前n个字符添加到str1后,而本函数是将整个部分添加到str1后,同样应该注意str1应该开辟足够大的空间。

代码模拟:

#include<stdio.h>//模拟实现strcat
#include<string.h>
int main()
{
void my_strcat(char *p1,char *p2,int n);
char str1[50]="what do you want to do?",str2[]="what are you doing?";
int n =strlen(str2);
my_strcat(str1,str2,n);
printf("%s\n",str1);
return 0;
}
void my_strcat(char *p1,char *p2,int n)
{  
     while(*p1!='\0')
  {
     p1++;
  }
  while(n>0)
  {
     *p1=*p2;
  n--;
  p1++;
  p2++;
  }
  *p1='\0';

}

代码结果:

wKioL1ZOyxfhQk1hAAAsU2g2FVg357.png

(本次实现了strstr,strncat,strcat)