strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
来源:互联网 发布:地砖 铺装 软件 编辑:程序博客网 时间:2024/04/29 23:33
#include<stdio.h>#include<stdlib.h>#include<Windows.h>#include<string.h>#include<assert.h>//模拟实现strlen三种实现方式int my_strlen_1(const char* str){ //使用计数器实现 int count = 0; assert(str); while(*str) { count++; str++; } return count;}//第二种递归实现int my_strlen_2(const char* str){ assert(str); if(*str != '\0') return 1+my_strlen_2(str+1); else return 0;}//指针减指针模拟实现int my_strlen_3(const char* str){ const char *p = str; while(*p) { p++; } return p-str;}int main(){ int len1 = my_strlen_1("abcdef"); int len2 = my_strlen_2("abcdef"); int len3 = my_strlen_3("abcdef"); printf("len1 = %d\n",len1); printf("len2 = %d\n",len2); printf("len3 = %d\n",len3); system("pause"); return 0;}//模拟实现strcpychar* my_strcpy(char* dest,const char* src){ char *ret = dest; assert(src != NULL); assert(dest != NULL); while(*dest++ = *src++) { ; } return ret;}int main(){ char arr[80]={0}; printf("string=%s\n",my_strcpy(arr,"hello world")); system("pause"); return 0;}//模拟实现strcatchar *my_strcat(char *dest,char *src){ char *ret = dest; assert(dest); assert(src); while(*dest) { dest++; } while(*dest++ = *src++) { ; } return ret;}int main(){ char arr1[15]="abcd"; char *arr2="ef"; printf("%s\n",my_strcat(arr1,arr2)); system("pause"); return 0;}//模拟实现strcmpint my_strcmp(const char* arr1,const char* arr2){ assert(arr1); assert(arr2); while(*arr1 == *arr2) { if(*arr1 == '\0') return 0; arr1++; arr2++; } return *arr1 - *arr2;}int main(){ char *arr1="abcdef"; char *arr2="abcd"; int ret=my_strcmp(arr1,arr2); printf("%d\n",ret); system("pause"); return 0;}//模拟实现strstrchar* my_strstr(const char* str, const char* substr) { const char* s1 = str; const char* s2 = substr; const char* ret = str;//ret就是用来保存首地址的 assert(str); assert(substr); if(strlen(s1)<strlen(s2)) return NULL; while (*ret) { s1 = ret;s2 = substr; while (*s1 && *s2 && (*s1 == *s2)) { s1++; s2++; } if (*s1 == '\0') { return NULL; } if(*s2 == '\0') return ret; ret++; } return NULL; } int main() { char a[20] = "abbbcdef"; char b[10] = "bbcde"; printf("%s\n", my_strstr(a, b)); system("pause"); return 0; } //模拟实现memcpyvoid* my_memcpy(void* dest, void* src,size_t n) { void* ret = dest; char* str1 = (char*)dest; char* str2 = (char*)src; assert(dest); assert(src); while (n--) { *str1++ = *str2++; } return ret; } void* my_memmove(void* dest, void* src, size_t n) { void* ret = dest; char* str1 = (char*)dest; char* str2 = (char*)src; assert(dest); assert(src); if (str1 > str2) { while (n--) { *(str1 + n) = *(str2 + n); } } else { while (n--) { *str1++ = *str2++; } } return ret; } int main() { int i = 0; int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int arr2[10] = { 0 }; int arr3[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; my_memcpy(arr2, arr1, sizeof(arr1)); my_memmove(arr3 + 5, arr3 + 4, 3 * sizeof(int)); for (i = 0; i < 10; i++) { printf("%d ", arr2[i]); } printf("\n"); for (i = 0; i < 10; i++) { printf("%d ", arr3[i]); } system("pause"); return 0; }
阅读全文
1 0
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现strlen,strcpy,strcat,strcmp,strstr,memcpy,memmove
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 模拟实现strcpy,strcmp,strcat,strstr.strlen
- strcpy,strcmp,strstr,strcat,memcpy,memmove的模拟实现
- strcpy, strcmp, strcat, strstr, strlen的实现
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 模拟实现strcpy ,strstr,strcat,strcmp,memcpy,memmove
- 模拟实现strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove
- 模拟实现strlen/strcpy/strcat/strcmp/strstr/strchr/函数
- 模拟实现strlen,strcpy,strcmp,strcat,strstr库函数
- 【C语言】、模拟实现strlen,strcmp,strcpy,strcat,strstr函数
- 模拟实现strcpy,strcmp,strstr,strncpy,strncmp,strcat,strlen函数
- 模拟实现strlen,strcpy,strcat,strstr,strcmp函数
- strcpy strlen memcpy strcat strcmp strstr strrev函数的实现代码
- bzoj 3401: [Usaco2009 Mar]Look Up 仰望
- c# winform下使用多线程时在线程里如何安全访问窗体控件InvokeRequired
- LeetCode 162. Find Peak Element
- StringUtils之isBlank分析
- HTML和JavaScript单双引号转义
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- Windows上安装Jekyll
- RecycleView加入底部loadmore(四)
- 使用feign作为客户端来消费服务,提供负载均衡和断路器支持
- UML简介
- 联发科编程大赛_第一题最大序列和
- 线程中的条件变量:pthread_cond_wait()用法分析
- 除了清空购物车,阿里年会的技术也超霸气!
- NOIP2014普及组--螺旋矩阵(模拟)