字符串训练(一)模拟实现strlen,strcmp,strcpy,strcat函数

来源:互联网 发布:js对svg放大缩小拖拽 编辑:程序博客网 时间:2024/05/16 05:29


1、模拟实现strlen函数(计数器实现,两个指针相减,递归实现)

//模拟实现strlen#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>//方法一:计数器实现 int  my_strlen1(const char * str){int len = 0;assert(NULL != str);while (*str++ != '\0'){len++;}return len;} //方法二:两个指针相减 int  my_strlen2(const char * str) {const char *strbak = NULL; assert(NULL != str); strbak =  str; while (*str++ != '\0') {NULL; }           //while循环后str指向\0后面的那个字符。 return(str-1-strbak); } //方法三用递归实现。 int  my_strlen3(const char * str) { assert(NULL != str); if ('\0' == *str ) { return 0; } else return (1+my_strlen3(str+1)); }int main(){char array[20] = "abcdef";printf("len = %d\n",my_strlen1(array));printf("len = %d\n",my_strlen2(array));printf("len = %d\n",my_strlen3(array));printf("hello...\n");system("pause");return 0;}



2、模拟实现strcpy函数

//模拟实现strcpy函数#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char *mystrcpy(char *dest, const char *src){char *destbak = NULL;assert(NULL != dest && NULL != src);/*while ('\0' != *src){*dest++ = *src++;}*dest = '\0';*/   //可以简化成下面的形式while ((*dest++ = *src++) ){NULL;}return destbak;}int main(){char array[100] = { 0 };char *p = "abcdef";mystrcpy(array, p);printf("array = %s\n",array);printf("hello...\n");system("pause");return 0;}

3、模拟实现strcat函数

//模拟实现strcat函数#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char * mystrcat(char *dest, const char *src){char *destbak = dest;assert(NULL != dest && NULL != src);while ( '\0' != *dest){dest++;}while (*dest++ = *src++){NULL;}return destbak;}int main(){char array[100] = "hello world";char *p = "abcdef";mystrcat(array, p);printf("array = %s\n",array);printf("hello...\n");system("pause");return 0;}


4、模拟实现strcmp函数(两种方法)

//模拟实现strcmp#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>//方法一int mystrcmp1(const char *str1, const char *str2){assert(NULL != str1 && NULL != str2);while ( '\0' != *str1 || '\0' != *str2 ){if (*str1 > *str2){return 1;}if (*str1 < *str2){return -1;}str1++;str2++;}if ('\0' == *str1 && '\0' == *str2){return 0;}}//方法二int mystrcmp2(const char *str1, const char *str2){assert(NULL != str1 && NULL != str2);while (*str1 == *str2){if ('\0' == *str1){return 0;}str1++;str2++;}if (*str1 > *str2){return 1;}elsereturn -1;}int main(){char *p = "abjdidfe";char *p2 = "dfjie";int ret = 0;ret = mystrcmp1(p,p2);if (0 == ret){printf("p1 = p2\n");}else if(ret > 0)printf("p1 > p2\n");else printf("p1 < p2\n");ret = mystrcmp2(p,p2);if (0 == ret){printf("p1 = p2\n");}else if(ret > 0)printf("p1 > p2\n");else printf("p1 < p2\n");printf("hello...\n");system("pause");return 0;}



0 0
原创粉丝点击