一、字符函数:
1. strlen()
void print(char* str)
{
while (*str)
{
printf("%c", *str);
str++;
}
printf("\n");
}
2. strcpy
char* MyStrcpy(const char* str1,char* str2)
{
char* p2 = str2;
while (*str1)
{
*str2 = *str1;
str2++;
str1++;
}
return p2;
}
3. strcmp
int MyStrcmp(const char* str1, const char* str2)
{
while (*str1 * *str2 != 0)
{
if (*str1 > *str2)
return 1;
else if (*str1 < *str2)
return -1;
str1++;
str2++;
}
if (*str1 == *str2)
return 0;
else if (0 == *str1)
return -1;
else
return 1;
}
4. strcat
#include<string.h>
char* MyStrcat(char* str1, const char* str2)
{
char* p1 = str1;
str1 += strlen(str1);
while (*str2)
{
*str1 = *str2;
str1++;
str2++;
}
*(str1 + 1) = *(str2 + 1);
return p1;
}
5. strstr
char* MyStrstr(const char* str1, const char* str2)
{
const char* ret = str1;
const char* savestr2 = str2;
while (str1 <= str1 + strlen(str1) - strlen(str2))
{
char* savestr1 = str1;
str2 = savestr2;
while (*str2)
{
if (*str1 != *str2)
break;
str2++;
str1++;
}
if (0 == *str2)
return savestr1;
str1 = savestr1 + 1;
}
return ret;
}
6. qsprt
void Swap(char* buf1, char* buf2, int size)//交换arr[j],arr[j+1]这两个元素
{
int i = 0;
char tmp = 0;
for (i = 0; i < size; i++)
{
tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
void bubble_sort(void* base, int num, int size, int (*cmp)(const void*, const void*))
{
int i = 0;
//趟数
for (i = 0; i < num - 1; i++)
{
int j = 0;
//一趟内部比较的对数
for (j = 0; j < num - 1 - i; j++)
{
//假设需要升序cmp返回>0,交换
if (cmp((char*)base+j*size, (char*)base+(j+1)*size)>0)//两个元素比较,需要将arr[j],arr[j+1]的地址要传给cmp
{
//交换
Swap((char*)base + j * size, (char*)base + (j + 1) * size, size);
}
}
}
}
二、内存函数
1. memcpy
//void* my_memcpy(const void* src, void* dest, int n)
//{
// assert(src && dest);
// void* ret = dest;
// while (n--)
// {
// *(char*)dest = *(char*)src;
// dest = (char*)dest + 1;
// src = (char*)src + 1;
// }
// return ret;
//}
2. memmove
void* my_memmove(const void* src, void* dest, int n)
{
void* ret = dest;
if (src < dest)
{
//从源的后向前复制
while (n--)
{
*((char*)dest + n) = *((char*)src + n);
}
}
else
{
while (n--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
return ret;
}