【C语言】模拟实现strcpy、strcat、strcmp函数
2016-07-31 19:06
316 查看
strcpy、strcat、strcmp这三个库函数是初级学习阶段经常写到的三个库函数,也是一些大公司比较喜欢出的面试题。今天,就尝试用my_strcpy、my_strcat、my_strcmp这三个函数来分别模拟实现库函数strcpy、strcat、strcmp。
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
这三个函数在模拟实现的时候,有很多地方是相同的,比如它们都是先记录目标字符数组的地址,都是利用字符串的长度来判断循环的停止条件等。当然它们在每个函数实现的模块里有自己的特色,这就要求我们知道该怎么使用这些库函数,它们的使用条件是什么,它们完成什么样的功能。只有这样,才能在面试的时候顺利完成函数的模拟实现。
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(*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
这三个函数在模拟实现的时候,有很多地方是相同的,比如它们都是先记录目标字符数组的地址,都是利用字符串的长度来判断循环的停止条件等。当然它们在每个函数实现的模块里有自己的特色,这就要求我们知道该怎么使用这些库函数,它们的使用条件是什么,它们完成什么样的功能。只有这样,才能在面试的时候顺利完成函数的模拟实现。
相关文章推荐
- 模拟实现strlen、strcpy、strcat、strcmp函数
- c语言实现strcpy,strcat,strcmp函数
- C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)
- [C语言]模拟实现strcpy/strncpy/strcat/strncat/strcmp/strncmp/strstr
- C语言模拟实现strcpy、strncpy、strcmp、strcat、strstr
- 模拟实现strlen,strcpy,strcat,strstr,strcmp函数
- 用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
- C语言模拟实现strcpy、strlen、strcmp、strcat
- 用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- C语言中模拟实现strcpy,strstr,strcat函数
- 【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
- c 语言之 模拟实现 strcpy 和 strcat 函数
- 【C语言】模拟实现strcmp函数
- 【面试题】C语言:模拟实现strncpy,尝试比较strncpy与strcpy区别。
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现部分库函数(strcpy,strcmp,strcat,strstr,memcpy,memmove,memset)
- C语言:模拟实现strcpy
- C语言中模拟实现strcpy,strstr,strcat函数
- 【C语言】strcpy(),strcat(), strcmp()函数的实现