字符串部分函數的實現

  • 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)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章