模拟实现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
- 模拟实现strcpy,strcmp,等str~系列函数
- 模拟实现strlen、strcpy、strcmp、strncmp等字符串函数
- 模拟实现strcpy与strcmp函数
- 模拟实现strlen、strcpy、strcat、strcmp函数
- 模拟实现 strcpy strcat strstr strcmp 函数
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- mem系列函数(memset memcpy memmove) 和str系列函数(strlen strcpy strcmp strcat strstr strtok)
- 模拟实现strcpy,strcat,strcmp
- 【C语言】模拟实现strcpy、strcat、strcmp函数
- C语言:模拟实现strlen、strcpy、strcmp、strReverse、strcat函数
- 模拟实现strlen/strcpy/strcat/strcmp/strstr/strchr/函数
- 【C语言】、模拟实现strlen,strcmp,strcpy,strcat,strstr函数
- 模拟实现strcpy,strcmp,strstr,strncpy,strncmp,strcat,strlen函数
- 模拟实现strlen,strcpy,strcat,strstr,strcmp函数
- C基础:strcat,strcmp,memcpy,strcpy等函数的实现
- strcat,strcmp,memcpy,strcpy等函数的实现
- strcat , strcpy , strcmp 函数实现
- strcpy等函数的模拟实现
- 滤波器到滤波算法到应用
- 进程间通信的方式
- 如何把自己的JavaWeb放到自己的服务器上
- FTI Sculptured Die Face(钣金冲压设计)v3.2官方版下载
- L LAMP环境搭建与配置(二)
- 模拟实现strcpy,strcmp,等str~系列函数
- 【OpenGL】斯坦福兔子、显示列表
- 计算从1990.01.01到某一天的天数
- UVALive
- yum 使用记录
- 在 spring boot 中使用spring cache + redis
- Android中HashMap内存优化之ArrayMap和SparseArray
- 37.开源项目--git+repo+gerrit环境介绍
- Android性能优化之提高ListView性能的技巧