guangzhouhe

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;
}

 

分类:

技术点:

相关文章: