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則可以執行到此步驟
}
代碼結果:
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
}
代碼結果:
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';
}
代碼結果:
(本次實現了strstr,strncat,strcat)