1.模拟实现strcpy

<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">//strcpy
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char* my_strcpy(char* dst, char* src)
{
assert(dst!=NULL&&src!=NULL);
char* ret = dst;
while ((*dst++ = *src++) != '\0')
;
return ret;
}
int main()
{
char str1[] = "Hello World";
char str2[40];
my_strcpy(str2, str1);
printf("%s\n", str2);
system("pause");
return 0;
}</span></span></span>



2.模拟实现strnpy

思路:利用count来控制复制次数,每次复制时,减减count

<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">//strncpy
#include<stdio.h>
#include<assert.h>
char* my_strncpy(char* dst, char* src, int count)
{
assert(dst != NULL&&src != NULL);
char* ret = dst;
while ((*dst++ = *src++) != '\0'&&count)
count--;
return ret;
}
int main()
{
char str1[] = "Hello World";
char str2[40] = "\0";
char str3[40] = "\0";
my_strncpy(str2, str1,sizeof(str1));
my_strncpy(str3, str1, 5);
printf("%s\n", str2);
printf("%s\n", str3);
system("pause");
return 0;
}</span></span></span>



3.模拟实现strcat

思路:先遍历一遍dst,将源字符串指针走到\0,然后利用src作为循环条件,将src依次赋值给dst,就形成连接。

<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">//strcat
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char* my_strcat(char* dst, char* src)
{
assert(dst != NULL&&src != NULL);
char* ret = dst;
while (*dst)
dst++;
while (*src)
*dst++ = *src++;
return ret;
}
int main()
{

char str1[50] = "Hello";
char str2[50] = " World";
my_strcat(str1, str2);
printf("%s\n", str1);
system("pause");
return 0;
}</span></span></span>



4.模拟实现strncat


<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">//strncat
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char* my_strncat(char* dst, char* src, int count)//利用count控制连接次数
{
assert(dst != NULL&&src != NULL);
char* ret = dst;

while (*dst)
dst++;
while (*src&&count)
{
*dst++ = *src++;
count--;
}
return ret;
}
int main()
{
char str1[50] = "Hello";
char str2[50] = " World";
my_strncat(str1, str2,sizeof(str2));
my_strncat(str1, str2, 3);
printf("%s\n", str1);
system("pause");
return 0;
}</span></span>



5.模拟实现strcmp

<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">//strcmp
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 != NULL&&str2 != NULL);
while (*str1==*str2) //如果两个一直相等,两个指针就后移
{
str1++;
str2++;
if (*str1 == '\0'&&*str2 == '\0')//知道移动到结尾。
return 0;
}
if (*str1>*str2)//两字符不相等,就进行比较
return 1;//大于返回1
else //小于 返回-1
return -1;
}

int main()
{
char* str1 = "aaaa";
char* str2 = "aaaa";
char* str3 = "aaaa";
char* str4 = "bbb";
char* str5 = "cc";
char* str6 = "aaaa";
int ret1 = my_strcmp(str1, str2);
int ret2 = my_strcmp(str3, str4);
int ret3 = my_strcmp(str5, str6);
printf("%d\n", ret1);
printf("%d\n", ret2);
printf("%d\n", ret3);
system("pause");
return 0;
}</span></span>




6.模拟实现strncmp

<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">//strncmp
#include<stdio.h>
#include<assert.h>
int my_strncmp(const char* str1, const char* str2,int count)//利用count控制
{
assert(str1 != NULL&&str2 != NULL);
while (*str1 == *str2&&count--) //如果两个相等,并且count不为0
{
str1++;
str2++;
if (count==0) //如果count等于0,就说明比完了
return 0;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
int main()
{
char* str1 = "aaaa";
char* str2 = "aaab";
char* str3 = "aac";
char* str4 = "aaaa";
int ret1 = my_strncmp(str1, str2,3);
int ret2 = my_strncmp(str3, str4,2);
printf("%d\n", ret1);
printf("%d\n", ret2);
system("pause");
return 0;
}</span></span>



7.模拟实现strstr

<span style="font-family:Microsoft YaHei;font-size:18px;">//strstr
#include <stdio.h>
#include <assert.h>

char *my_strstr(const char *str1, const char *str2)
{
assert(str1);
assert(str2);
char *p = str1;
char *q = str2;
char *start;
while (*p)
{
start = p;
while (*p && *q && *p == *q)
{
p++;
q++;
}
if (*q == '\0')
{
return start;
}
p++; //不匹配,str1由上一次的起始位置向后加1
}
return NULL; //整体遍历完没有找到,返回空
}

int main()
{
char *str1 = "abbbcdef";
char *str2 = "bbcd";
char *ret = my_strstr(str1, str2);
printf("%s\n", ret);
system("pause");
return 0;
}</span>