笔记内容:
1.模拟strlen;
2.模拟strcpy;
3.模拟strcmp;
4.模拟strcat;
5.模拟strstr;
6.qsort;
7.模拟memcpy;
8.模拟memmove;
#include<stdio.h>
#include<windows.h>
#include<assert.h>
#include<string.h>
int Mystrlen(char *p)
{
int i = 0;
while (*p != '\0'){
p++;
i++;
}
return i;
}
char *Mystrcpy(char *dst, const char *src)
{
assert(dst);
assert(src);
char *ret = dst;
while (*dst = *src){
dst++;
src++;
}
return ret;
}
int Mystrcmp(const char *str1, const char *str2)
{
assert(str1);
assert(str2);
while (*(str1) == *(str2))
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
char *Mystrcat(char *dst, const char *src)
{
char *start = dst;
int len_dst = strlen(dst);
dst += len_dst;
while (*dst = *src){
dst++;
src++;
}
return start;
}
char *Mystrstr(char *dst, const char * src)
{
assert(dst);
assert(src);
int i, j, k;
for (i = 0; dst[i] != '\0'; i++)
{
for (j = i, k = 0; src[k] != '\0'&&dst[j] == src[k]; j++, k++)
{
;
}
if (src[k] == '\0'&&k > 0)
return &dst[i];
}
return NULL;
}
int int_cmp(const void *p1, const void *p2)
{
return (*(int *)p1 - *(int *)p2);
}
struct stu{
char name[16];
int age;
char sex;
};
void *My_memcpy(void *dst, const void *src, int num)
{
assert(dst);
assert(src);
char *_dst = (char*)dst;
char *_src = (char*)src;
while (num){
*_dst = *_src;
_dst++;
_src++;
num--;
}
return dst;
}
void *My_memmove(void *dst, const void *src, int num)
{
assert(dst);
assert(src);
char *_dst = (char*)dst;
char *_src = (char*)src;
if (_dst > _src&&_dst < _src + num){
//right -> left
_src = _src + num - 1;
_dst = _dst + num - 1;
while (num){
*_dst = *_src;
_dst--;
_src--;
num--;
}
}
else{
//left -> right
while (num){
*_dst = *_src;
_dst++;
_src++;
num--;
}
}
return dst;
}
int main()
{
//模拟strstr
char *arr1 = "abcdefg";
char *arr2 = "de";
printf("%s\n", Mystrstr(arr1, arr2));
//模拟strcat
char arr1[32] = "hello ";
char *arr2 = "world";
printf("%s", Mystrcat(arr1, arr2));
//模拟strcmp
const char *arr1 = "abcde";
const char *arr2 = "aedbc";
printf("%d\n", Mystrcmp(arr1, arr2));
//模拟strcpy
char dst[32] = { '\0' };
const char *src = "1901210139";
printf("%s\n", Mystrcpy(dst, src));
//模拟strlen
char *p = "1901210139";
int len = Mystrlen(p);
printf("%d", len);
//qsort
int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
int num = sizeof(arr) / sizeof(arr[0]);
qsort(arr, num, sizeof(int), int_cmp);
for (int i = 0; i < num; i++){
printf("%d", arr[i]);
}
printf("\n");
//模拟实现memcpy
int a[] = { 1, 2, 3, 4, 5 };
int b[5] = { 0 };
My_memcpy(b, a, sizeof(a));
struct stu tom = { "Tom", 21, 'm' };
struct stu peter;
My_memcpy(&peter, &tom, sizeof(tom));
//模拟实现memmove
char str[] = "abcdefg";
int len = strlen(str) + 1;
My_memmove(str, str + 1, len);//bcdefg\0
My_memmove(str + 1, str, len);//aabcdefg
system("pause");
return 0;
}
模拟memcpy监视窗口: