1、实现strcpy函数
char* my_strcpy(char *dest,const char *src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++))
{
;
}
return ret;
}
测试函数:
int main()
{
char str1[20];
char* str2 = "abcdefg";
char* ret = my_strcpy(str1, str2);
printf("%s\n", ret);
system("pause");
return 0;
}
2、实现strcat函数
char *my_strcat(char *dest,const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}
测试函数:
int main()
{
char str1[20] = "123";
char* str2 = "abc";
char* ret = my_strcat(str1, str2);
printf("%s\n", ret);
system("pause");
return 0;
}
3、实现strstr函数
char *my_strstr(const char* str1,const char* str2)
{
assert(str1);
assert(str2);
char *cp = (char*)str1;
char *substr = (char*)str2;
char*s1 = NULL;
if(*str2 == '\0')
return NULL;
while(*cp)
{
s1 = cp;
substr = str2;
while(*s1 && *substr && (*s1 == *substr))
{
s1++;
substr++;
}
if(*substr == '\0')
return cp;
cp++;
}
}
测试函数:
int main()
{
const char* str = "abcdefg";
const char* substr = "bcd";
char* ret = my_strstr(str, substr);
if (ret == NULL)
{
printf("不是字串!\n");
}
else
{
printf("%s\n", ret);
}
system("pause\n");
return 0;
}
4、实现strchr函数
char* my_strchr(const char* str, char ch)
{
int i = 0;
assert(str);
while (*str != NULL)
{
if (*str == ch)
{
return str;
}
else{
str++;
}
}
return NULL;
}
测试函数:
int main(){
char* arr = "abcdefe";
char p = 'e';
char* ret = my_strchr(arr, p);
printf("%s", ret);
system("pause");
return 0;
}
5、实现strcmp函数
int my_strcmp(const char* src,const char* dest)
{
int ret = 0;
assert(src != NULL);
assert(dest != NULL);
while(!(ret = *(unsigned char*)src - *(unsigned char*)dest) && *dest)
++src,++dest;
if(ret<0)
ret = -1;
else if(ret>0)
ret = 1;
return(ret);
}
测试函数:
int main(){
char* str1 = "abcdef";
char* str2 = "abcd";
int ret = my_strcmp(str1, str2);
printf("%d", ret);
system("pause");
return 0;
}
6、实现memcpy函数
void *my_memcpy(void* dst,const void* src,size_t count)
{
void* ret = dst;
assert(dst);
assert(src);
while(count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return(ret);
}
测试函数:
int main()
{
int i = 0;
int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[10] = { 0 };
my_memcpy(arr2, arr1, sizeof(arr1));
for (i = 0; i < 10; i++)
{
printf("%d ", arr2[i]);
}
system("pause");
return 0;
}
7、实现memmove函数
void *my_memmove(void* dst,const void* src,size_t count)
{
void* ret = dst;
if(dst<=src||(char*)dst>=((char*)src + count))
{
while(count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else
{
dst = (char*)dst + count - 1;
src = (char*)src + count - 1;
while(count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst - 1;
src = (char*)src - 1;
}
}
return(ret);
}
测试函数:
int main()
{
char str[] = "hello world hello bit";
my_memmove(str+2,str+5,9);
printf("%s", str);
system("pause");
return 0;
}
8、实现strncpy函数
char* my_strncpy(char* dest,const char* src,size_t sz)
{
size_t i = 0;
for(i = 0; i < sz; i++)
{
*(dest+i) = *(src+i);
}
*(dest+i) = '\0';
return dest;
}
测试函数:
int main()
{
char str1[] = "hello world";
char str2[] = {0};
char *p = my_strncpy(str2, str1, 5*sizeof(str1[0]));
printf("%s", p);
system("pause");
return 0;
}
9、实现strncat函数
char *my_strncat(char *dest,const char*src,size_t sz)
{
char* ret = dest;
assert(dest);
assert(src);
while(*dest != '\0')
{
dest++;
}
while(sz--)
{
*dest++ = *src++;
}
*dest = '\0';
return ret;
}
测试函数:
int main()
{
char str1[] = "hello ";
char str2[] = "world";
char *p = my_strncat(str1, str2, 5*sizeof(str1[0]));
printf("%s", p);
system("pause");
return 0;
}
10、实现strncmp函数
int my_strncmp(const char* src,const char* dest,size_t sz)
{
size_t i = 0;
assert(src != NULL);
assert(dest != NULL);
while(i<sz && *src && *dest)
{
if(*src < *dest)
return -1;
else if(*src > *dest)
return 1;
src++;
dest++;
sz++;
}
return 0;
}
测试函数:
int main()
{
char str1[] = "hello world";
char str2[] = "hella";
int p = my_strncmp(str1, str2, 5*sizeof(str1[0]));
printf("%d", p);
system("pause");
return 0;
}