您的位置:首页 > 其它

模拟实现strcpy 模拟实现strncpy 模拟实现strcat 模拟实现strncat 模拟实现strcmp 模拟实现strncmp 模拟实现memcpy 模拟实现memmove

2016-07-30 14:25 483 查看
//模拟实现strcpy
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void my_strcpy(char *dest, const char *src)
{
assert(src);
while(*dest++ = *src++)
;
}
int main()
{
char arr1[20] = {0};
char arr2[] = "abcdef";
my_strcpy(arr1,arr2);
printf("%s\n",arr1);
system("pause");
return 0;
}模拟实现strncpy

模拟实现strncpy
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void my_strncpy(char *dest, const char *src, int n)
{
assert(src);
while( (n--) && (*dest++ = *src++) )
;
}
int main()
{
char arr1[20] = {0};
char arr2[] = "abcdef";
int n = 0;
scanf("%d",&n);
my_strncpy(arr1, arr2, n);
printf("%s\n",arr1);
system("pause");
return 0;
}

模拟实现strcat
模拟实现strcat
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void my_strcat(char *dest, const char *src, int len)
{
char *ret=dest+len;
assert(src);
//printf("%s\n",(dest+1));
while(*ret++ = *src++)
;
}
int main()
{
char arr1[20] = "abcd";
char arr2[] = "efgh";
int len = strlen(arr1);
my_strcat(arr1, arr2, len);
printf("%s\n",arr1);
system("pause");
return 0;
}

模拟实现strncat
模拟实现strncat
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void my_strncat(char *dest, const char *src, int len1, int len2, int n)
{
char *ret = dest+len1;
assert(src);
assert(n<=len2);
while((n--) && (*ret++=*src++))
;
}
int main()
{
char arr1[20] = "abcd";
char arr2[] = "efghi";
int len1 = strlen(arr1);
int len2 = strlen(arr2);
int n = 0;
scanf("%d",&n);
my_strncat(arr1, arr2, len1, len2, n);
printf("%s\n",arr1);
system("pause");
return 0;
}

模拟实现strcmp
模拟实现strcmp
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
int my_strcmp(const char *dest, const char *src)
{
int ret = 0;
while(!(ret = (unsigned char)*dest-(unsigned char)*src) && *dest)
{
dest++;
src++;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdefg";
int ret = my_strcmp(arr1,arr2);
if(ret == 0)
{
printf("%s=%s\n",arr1,arr2);
}
else if(ret < 0)
{
printf("%s<%s\n",arr1,arr2);
}
else
{
printf("%s>%s\n",arr1,arr2);
}
system("pause");
return 0;
}

模拟实现strncmp
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
int my_strncmp(const char *dest, const char *src, int n)
{
int ret = 0;
assert(dest);
assert(src);
assert(n);
while( (n--) && !(ret = (unsigned char)*dest-(unsigned char)*src) && *dest )
{
dest++;
src++;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcedef";
int n = 0;
int ret = 0;
int i = 0;
scanf("%d",&n);
ret = my_strncmp(arr1, arr2, n);
if(ret == 0)
{
for(i=0; i<n; i++)
printf("%c",arr1[i]);
printf("=");
for(i=0; i<n; i++)
printf("%c",arr2[i]);
}
else if(ret < 0)
{
for(i=0; i<n; i++)
printf("%c",arr1[i]);
printf("<");
for(i=0; i<n; i++)
printf("%c",arr2[i]);
}
else
{
for(i=0; i<n; i++)
printf("%c",arr1[i]);
printf(">");
for(i=0; i<n; i++)
printf("%c",arr2[i]);
}
system("pause");
return 0;
}
模拟实现memcpy
模拟实现memcpy
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void my_memcpy(void *dest, const void *src, int n)
{
char  *pdest=(char*)dest;
char *psrc=(char*)src;
while((n--)&& ((*pdest++) = (*psrc++)))
{
;
}
}
int main()
{
char arr1[20] = {0};
char arr2[] = "abcdefg";
int n = 0;
scanf("%d",&n);
my_memcpy(arr1,arr2,n);
printf("%s",arr1);
system("pause");
return 0;
}


模拟实现memmove
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
void my_memmove(void *dest,const void *src, int n)
{
char *pdest = (char*)dest;
char *psrc = (char*)src;
if(src>dest)
{
while((n--)&&(*pdest++=*psrc++))
;
}
else
{
pdest+=n-1;
psrc+=n-1;
while((n--)&&(*pdest--=*psrc--))
;
}
}
int main()
{
char arr[] = "abcdefgh";
int n = 0;
scanf("%d",&n);
my_memmove(arr+3, arr+1, n);
printf("%s\n",arr+3);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: