模拟实现strcpy,strcmp,等str~系列函数

来源:互联网 发布:seo公司排行榜 编辑:程序博客网 时间:2024/06/05 05:58
//1.实现strcpy//2.实现strcat//3.实现strstr//4.实现strchr//5.实现strcmp//6.实现memcpy//7.实现memmove#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>//1.实现strcpychar * My_strcpy(char *dst, const char *src){assert(src);char *ret = dst;while (*dst++ = *src++){;}return ret;}//2.实现strcatchar * My_strcat(char *dst, const char *src){assert(dst);assert(src);char *ret = dst;while (*dst){dst++;}while (*dst++ = *src++){;}return ret;}//3.实现strstrchar * My_strstr(const char *dst, const char *src){assert(src);assert(dst);char *search = (char *)dst;char *p = NULL;while (*search){p = search;char *substr = (char*)src;while (*p&&*substr && (*p == *substr)){p++;substr++;}if (*substr == '\0'){return search;}search++;}return NULL;}//4.实现strchrchar * My_strchr(const char *dst, int ch){assert(dst);assert(ch);char* search = (char*)dst;while (*search){if (*search == ch){return search;}search++;}return NULL;}//5.实现strcmpint My_strcmp(const char * src, const char * dst){assert(src);assert(dst);int ret = 0;while ( !(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst){src++;dst++;}if (ret < 0){ret = -1;}elseif (ret > 0){ret = 1;}return ret;}//6.实现memcpy(不限制类型)void * My_memcpy(void * dst, const void * src, size_t num){void * ret = dst;//从高地址开始拷贝while (num--){*(char*)dst = *(char *)src;//(char *)dst++, (char*)src++;dst = (char *)dst + 1;src = (char*)src + 1;}return ret;}//7.实现memmovevoid * My_memmove(void * dst, const void * src, size_t num){void *ret = dst;if (dst<src || ((char *)dst>(char*)src + num)){while (num--){*(char*)dst = *(char *)src;dst = (char *)dst + 1;src = (char*)src + 1;}}else{dst = (char*)dst + num - 1;src = (char*)src + num - 1;while (num--){*(char*)dst = *(char *)src;dst = (char *)dst + 1;src = (char*)src + 1;}}return ret;}int main(){char str1[] = "AB";char str2[] = "EFGH";char str3[] = "ABCDEFG";char buffer[] = { 0 };char *ret = NULL;char ch = 'E';printf("str1 : %s   str2 : %s   str3 :%s    ch : %c\n",str1,str2,str3,ch);printf("\n");printf("将str1内存中内容拷贝到buffer中:\n");My_strcpy(buffer, str1);printf("buffer:%s\n", buffer);printf("\n");printf("将str1拼接到str2后面:\n");My_strcat(str2, str1);printf("str2:%s\n", str2);printf("\n");printf("在str3字符串中找是否含有子串str1,\n找到则输出第一次出现的位置,没找到则输出0\n");ret=My_strstr(str3, str1);printf("结果为:%d\n", ret-str3+1);printf("\n");printf("在str3字符串中找是否含有字符变量ch,\n找到则输出第一次出现的位置,没找到则输出0\n");ret = My_strchr(str3, ch);printf("结果为:%d\n", ret-str3+1);printf("\n");printf("将str3与str1比较,大于输出1,小于输出-1,等于输出0\n");printf("结果为:%d\n", My_strcmp(str3, str1));printf("\n");printf("将str1全部字节拷贝到buffer中:\n");int length = sizeof(str1);My_memcpy(buffer, str1,length);printf("buffer:%s\n", buffer);printf("\n");printf("将str3从它自己在内存中第3个字节处开始覆盖:\n");length = sizeof(str3+3-1);My_memmove(str3, str3+3-1, length);printf("str3:%s\n",str3);printf("\n");fflush(stdin);getchar();return 0;}


阅读全文
0 0
原创粉丝点击