void strlen(char *str)
第一种:指针自加
int My_Strlen(char * str) { assert(str);//判断地址是否可用,如果错误,退出并且标准输出错误 int len=0; while(*(str+len)) len++;//一直到‘\0’的实际值是0,跳出while return len; }
第二种:递归
int mystrlen(const char *StrDest) { assert(NULL !=StrDest); if(*StrDest == \'\0\') return 0; return (1+mystrlen(++StrDest)); }
第三种:三目运算符+递归
int mystrlen(const char*StrDest) { assert(NULL != StrDest); return (\'\0\'!= *StrDest)?(1+mystrlen(StrDest+1)):0; }
第四种:数组
/* strlen: return length of s */ int strlen(char s[]) { int i; while (s[i] != \'\0\') ++i; return i; }
void strlen(char *str1,char *str2)
int My_Strcpy(char * str1,char * str2) { assert(str1);//检查 assert(str2); memset(str1,0,My_Strlen(str1));//清空str1 int n=0; while(*(str2+n)) { *(str1+n) = *(str2+n); n++; } return 0; }
void strcat(char *str1,char *str2)
char *strcat (char * dst, const char * src) { assert(NULL != dst && NULL != src); char * cp = dst; while( \'\0\' != *cp ) cp++; while( \'\0\' != (*cp++ = *src++) ) ; return( dst ); }
成品
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define M 20 int He_strlen(char *str); int He_strcpy(char *str1,char *str2); char *strcat (char * dst, const char * src); int He_strlen(char *str) { assert(str);//先判断指针地址是否可用,如果不可用程序终止 if(*str == \'\0\') return 0; return (1+He_strlen(++str));//用递归,调用函数本身 } int He_strcpy(char *str1,char *str2) { assert(str1); assert(str2); memset(str1,0,He_strlen(str1)); int n=0; while(*(str2+n)) { *(str1+n)=*(str2+n); n++; } return 0; } char *strcat (char * dst, const char * src) { assert(NULL != dst && NULL != src); char * cp = dst; while( \'\0\' != *cp ) cp++; while( \'\0\' != (*cp++ = *src++) ) ; return( dst ); } int main() { char *str_1=(char *)calloc(M,sizeof(char)); char *str_2=(char *)calloc(M,sizeof(char)); char *str_3=(char *)calloc(M,sizeof(char)); if(str_1==NULL||str_2==NULL) { printf("申请空间失败!\n"); return -1; } printf("请输入要操作的字符串:"); scanf("%s%s",str_1,str_3); printf("输入的字符串共有%d个字符\n",He_strlen(str_1)); He_strcpy(str_2,str_1); printf("str_2:%s\n",str_2); strcat(str_1,str_3); printf("str_1:%s\n",str_1); return 0; }