实现一些自己的simple string(s trcat strcmp strncmp strlen strcpy strncpy memcpy)

#include<stdio.h>
#include<assert.h>
#include<string.h>
typedef unsigned int size_t;




int strnCmp(const char * s1, const char *s2 , size_t count)
{
if(!s1  ||  !s2)
printf("string is null\n");
while( !(*s1-*s2)  && *s1!='\0' &&  *s2!='\0'&& --count)
{
s1++;
s2++;
// count--;
}
if(*s1-*s2==0)
return 0;
if(*s1-*s2>0)
return 1;
else if(*s1-*s2<0)
return -1;
}


int strCmp(const char *s1,const char *s2)
{
int result;
while(1)
{
if( (result=*s1-*s2) !=0 )
return result;
if( *s1 =='\0' && *s2=='\0')
return 0;
s1++;
s2++;
}
}


size_t  myStrlen(const char *s)
{
assert( s !=NULL);
int len=0;
while(*s!='\0')
{
len++;
s++;
}
return len;
}




char * myStrcpy(char *dest,const char *src)
{
assert(dest!=NULL && src!=NULL);
while( (*dest++ =*src++ )!='\0')
{
;
}
// *(dest++)='\0';  比这种方式更好,少了分情况讨论
return dest;
}




char * myStrncpy(char *dest,const char *src, size_t n)
{
assert(dest!=NULL && src!=NULL);
while(n )
{
*dest++=*src++;
n--;
}
//   *(dest++)='\0';
return dest;
}


char * myStrcat(char * dest ,const char * src)
{
assert(dest!=NULL && src!=NULL);
while( *dest !='\0')
dest ++;
while( (*dest++ = *src++)!='\0' )
;
return dest;
}




void *myMemcpy(void * dest,const void *src,size_t count)
{
assert(dest!=NULL && src!=NULL);
while(count )
{
*(char *) dest++ =*(char *)src++;
count--;
}
return dest;
}




int main()
{
char  str[10];
char  dest[10]="ABCDE";
char  str1[10]="ABCDE";
scanf("%s",str);
/*
  int a=strlen(str);


  printf("the lib strlen  is %d\n",a);
  int b=myStrlen(str);
  printf("the my strlen  is %d\n\n\n",b);


  printf("the original :%s\n",str);
  myStrcpy(dest,str);
  printf("after the my copy :%s\n",dest);


  strcpy(str1,str);
  printf("after the lib copy :%s\n\n\n",str1);




  printf("the original :%s\n",str);
  myStrncpy(dest,str,3);
  printf("after the my ncopy :%s\n",dest);


  strncpy(str1,str,3);
  printf("after the lib ncopy :%s\n",str1);






  printf("the original :%s\n",str);
  myStrcat(dest,str);
  printf("after the my strcat :%s\n",dest);


  strcat(str1,str);
  printf("after the lib strcat :%s\n",str1);




  printf("the original :%s\n",str); //注意测试数据记得选择比src 大,小,相等
  myMemcpy(dest,str,3);
  printf("after the my memcpy :%s\n",dest);


  memcpy(str1,str,3);
  printf("after the lib memcpy :%s\n",str1);
*/


int a[3]={0};  //int 作为测试数据
int b[3]={0};
int i;
myMemcpy(a,str,5);
printf("after the my memcpy :\n");
for(i=0 ;i<sizeof(a);i++)  //其实应该把sizeof(a)提到外面,否则性能低下,重复调用频繁
printf("%d ",* (( char *)a+i) );
printf("\n\n");
memcpy(b,str,5);
printf("after the lib memcpy :\n");
for(i=0 ;i<sizeof(b);i++)
printf("%d ", * ( ( char *)b+i) );


return 1;


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值