模拟实现字符串的功能

本文深入探讨了C语言中常见的字符串操作函数,包括strcpy、strcat、strstr、strchr、strcmp、memcpy和memmove的实现原理及应用。通过具体代码示例,详细解释了每个函数的功能、参数和返回值,为读者提供了全面的C语言字符串处理指南。
strcpy

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<assert.h>
char *strcoy(char *dest, const char *src)
{
char *ret = dest;
assert(dest);
assert(src);
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = “abcdef”;
char arr2[] = “123456”;
printf("%s\n", strcpy(arr1, arr2));
system(“pause”);
return 0;
}

strcat

#define CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<assert.h>
char *strcat(char *dest, const char *src)
{
char *ret = dest;
assert(dest);
assert(src);
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = “abcdef”;
char arr2[] = “123456”;
printf("%s\n", strcat(arr1, arr2));
system(“pause”);
return 0;
}

strstr

#define CRT_SECURE_NO_WARNINGS 1
#inlcude<stdio.h>
#include<windows.h>
#include<assert.h>
char *strstr(char *arr1, const char *arr2)
{
assert(arr1);
assert(arr2);
char *s1 = (char *)arr1;
char *s2 = (char *)arr2;
char *ret = NULL;
if (*arr2 == ‘\0’)
{
return NULL;
}
while (*s1)
{
ret = s1;
s2 = (char *)arr2;
while (*ret&&s2 && (*ret == *s2))
{
ret++,s2++;
}
if (*s2 == ‘\0’)
{
return s2;
}
s1++;
}
}
int main()
{
char arr1[] = “abcd12ab”;
char arr2[] = “abc”;
printf(" ");
char *pd = strstr(arr1, arr2);
if (pd != NULL)
{
printf(“yes!\n”);
}
else
printf(“no!\n”);
system(“pause”);
return 0;
}

strchr

#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strstr(char *arr1, const char *arr2)
{
assert(arr1);
assert(arr2);
char *s1=(char *) arr1;
char *s2=(char *) arr2;
char *ret=NULL;
if(*arr2==’\0’)
{
return NULL;
}
while(*s1)
{
ret=s1;
s2=(char *)arr2;
while(*ret&&*s2&&(*ret==*s2))
{
ret++,s2++;
}
if(*s2==’\0’)
{
return s2;
}
s1++;
}
}
int main()
{
char arr1[]=“abcdef123abc”;
char arr2[]=“abc”;
// printf("");
char *pd=my_strstr(arr1,arr2);
if(pd!=NULL)
{
printf("找到了!\n ");
}
else
printf(“没找到!\n”);
system(“pause”);
return 0;
}

strcmp

#include <stdio.h>
#include <windows.h>
#include <assert.h>
int my_strcmp(char *src,const char dst)
{
assert(dst);
assert(src);
int ret=0;
while(!(ret=
(unsigned char )src-(unsigned char *)dst)&&*dst)
{
++src,++dst;
}
if(ret<0)
ret=-1;
else if(ret>0)
ret=1;
return (ret);
}
int main()
{
char arr1[]=“abcdef”;
char arr2[]=“ab”;
int ret=my_strcmp(arr1,arr2);
if(ret)
{
printf(“第一个\n”);
}
else
{
printf(“第二个\n”);
}

system(“pause”);
return 0;
}

memcpy

#include <stdio.h>
#include <windows.h>
#include <assert.h>
void *my_memcpy(void *dst,const void *src,size_t count)
{
assert(dst);
assert(src);
void *ret=dst;
while(count–)
{
*(char )dst=(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
return (ret);
}
int main()
{
char arr1[]=“abcdef”;
char arr2[]=“123456”;
printf("%s\n",my_memcpy(arr1,arr2,3));
system(“pause”);
return 0;
}

memmove

#include <stdio.h>
#include <windows.h>
#include <assert.h>
void *my_memmove(void *dst,const void *src,size_t count)
{
assert(dst);
assert(src);
void *ret=dst;
if(dst<src||(char *)dst>=((char *)src+count)) //从左往右拷贝
{
while(count–)
{
*(char )dst=(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
}
else
dst=(char *)dst+count-1;
src=(char *)src+count-1;
while(count–)
{
*(char )dst=(char *)src;
dst=(char *)dst-1;
src=(char *)src-1;
}
}

return (ret);

}
int main()
{
char arr1[]=“abcdfgh”;
char arr2[]=“123456”;
printf("%s\n",my_memmove(arr1,arr2,5));
system(“pause”);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值