strcpy,strcat,strcmp,strstr的模拟实现
2018-04-01 23:17
316 查看
用my_strcpy、my_strcat、my_strcmp、my_strstr这四个函数来分别模拟实现库函数strcpy、strcat、strcmp、strstr。
1.strcpy
strcpy(dest,src)函数是把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间中,而且src和dest所指内存区域不可以重叠。这就要求dest必须有足够的空间来容纳src的字符串。
思路:对src字符串一个一个进行拷贝,当遇到NULL时,dest停止拷贝。
结果:hello world
2.strcat
strcat(dest,src)是把src所指字符串添加到dest结尾处(覆盖dest结尾处的‘\0’),src和dest所指内存区域不可以重叠,所以dest必须有足够的空间来容纳。最后结果返回的是指向dest的指针。
思路:先将dest最后一个字符的地址记录下来,然后将src拷贝,即追加上去。
结果:abcdef
3.strcmp
strcmp(str1,str2)是用来比较两个字符串的,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1 < str2,则返回负数;若str1>str2,则返回正数。例如:abcd>abcc。
思路:把两个字符串一个一个进行比较,当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。
结果:101
4.strstr
函数的定义:char* my_strstr(const char* dest,const char*src){}。其中,dest指向的是目标字符串,也就是你需要比较的字符串,src指向的是源字符串,也就是用来被比较的字符串。找不到就可以返回一个空指针。
思路:可以建立两个指针,通过遍历的方式逐个访问字符串,并对这两个指针一一比较。
1.strcpy
strcpy(dest,src)函数是把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间中,而且src和dest所指内存区域不可以重叠。这就要求dest必须有足够的空间来容纳src的字符串。
思路:对src字符串一个一个进行拷贝,当遇到NULL时,dest停止拷贝。
char* my_strcpy(char *dest,const char *src) { char *cp=dest; assert(src && dest); while(*dest++=*src++) { ; } return cp; } int main() { char arr[80]={0}; printf("string=%s\n",my_strcpy(arr,"hello world")); return 0; }
结果:hello world
2.strcat
strcat(dest,src)是把src所指字符串添加到dest结尾处(覆盖dest结尾处的‘\0’),src和dest所指内存区域不可以重叠,所以dest必须有足够的空间来容纳。最后结果返回的是指向dest的指针。
思路:先将dest最后一个字符的地址记录下来,然后将src拷贝,即追加上去。
char* my_strcat(char* dest,char* src) { char *cp=dest; assert(src && dest); while a95b (*dest!='\0') { dest++; } while(*dest++=*src++) { ; } return cp; } int main() { char arr1[15]="abcd"; char *arr2="ef"; printf("%s\n",my_strcat(arr1,arr2)); return 0; }
结果:abcdef
3.strcmp
strcmp(str1,str2)是用来比较两个字符串的,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1 < str2,则返回负数;若str1>str2,则返回正数。例如:abcd>abcc。
思路:把两个字符串一个一个进行比较,当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。
int my_strcmp(char* arr1,char* arr2) { assert(arr1 && arr2) while(*arr1==*arr2) { if(*arr1=='\0') return 0; } return *arr1-*arr2; } int main() { char *arr1="abcde"; char *arr2="abcd"; int ret=my_strcmp(arr1,arr2); printf("%d\n",ret); }
结果:101
4.strstr
函数的定义:char* my_strstr(const char* dest,const char*src){}。其中,dest指向的是目标字符串,也就是你需要比较的字符串,src指向的是源字符串,也就是用来被比较的字符串。找不到就可以返回一个空指针。
思路:可以建立两个指针,通过遍历的方式逐个访问字符串,并对这两个指针一一比较。
char *my_strstr(char *s1,const char*s2) { int n; printf("%x\n",s1); if(*s2) { while(*s1) { for(n=0;*(s1+n)==*(s2+n);n++) { if(!*(s2+n+1)) return(char*)s1; } s1++; } return NULL; } else printf("LLHH!\n"); return (char*)s1; } //test void main() { char aa[20]="aabb"; char *bb="bb"; char *cc; cc=my_strstr(aa,bb); printf("%x\n",cc); }
相关文章推荐
- 模拟实现strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 模拟实现 strcpy strcat strstr strcmp 函数
- 模拟实现strcpy,strcmp,strcat,strstr.strlen
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- C语言模拟实现strcpy、strncpy、strcmp、strcat、strstr
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现strcpy,strcmp,strstr,strncpy,strncmp,strcat,strlen函数
- 模拟实现c库函数strcpy,strcat,strstr,strcmp,memcpy,memmove
- strcpy,strcmp,strstr,strcat,memcpy,memmove,memset的模拟实现
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现部分库函数(strcpy,strcmp,strcat,strstr,memcpy,memmove,memset)
- 模拟实现strcpy,strcat,strcmp,strstr
- C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 模拟实现strlen,strcpy,strcat,strstr,strcmp,memcpy,memmove
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp