利用C语言如何实现string,C语言实现MyString

C语言实现strcpy strcat strstr strchr strcmp memcpy memove

char my_strcpy(char *dest, const char *src)//实现strcpy

{

assert(dest);

assert(src);

while (*src)

{

*dest = *src;

dest++;

src++;

}

*dest = ' ';

}

int main()

{

char dest[20] ="1234567890";

char src []= "abcdef";

my_strcpy(dest, src);

printf("%sn", dest);

system("pause");

return 0;

}

#include#includechar my_strcat(char *dest, const char *src)//实现strcat

{

assert(dest);

assert(src);

while (*dest != ' ')

{

dest++;

}

while (*src != ' ')

{

*dest = *src;

dest++;

src++;

}

}

int main()

{

char dest[20] = "1234567890";

char src []= "abcdef";

my_strcat(dest, src);

printf("%s", dest);

system("pause");

return 0;

}

#includeconst char *Mystrchr(const char *src, char ch)//实现strchr

{

while (*src != ' ')

{

if (*src == ch)

{

return src;

}

src++;

}

return NULL;

}

int main()

{

char str[10] = "abcdefg";

char a = 'b';

printf("%s", Mystrchr(str,a));

system("pause");

return 0;

}

#include#includeconst char *My_strstr(const char *str1, const char *str2)实现strstr

{

const char *s1 = NULL;

const char *s2 = NULL;

const char *start = str1;

while (*start != ' ')

{

s1 = start;//s1回退到上一次的下一个位置

s2 = str2;//s2回退到str2的起始位置

while (*s1 != ' ' && *s2 != ' '&&*s1 == *s2)

{

s1++;

s2++;

}

if (*s1 == ' ')

{

return NULL;

}

if (*s2 == ' ')

{

return start;

}

start++;

}

return NULL;

}

int main()

{

char dest[20] = "123aabcdef90";

char src []= "abcdef";

printf("%sn", My_strstr(dest, src));

system("pause");

return 0;

}

#include#includeint* my_strcmp(char *dest, const char *src)实现strcmp

{

assert(dest);

assert(src);

while (*dest != ' '&&*src!=' ')

{

if (*dest == *src)

{

dest++;

src++;

}

else if (*dest > *src)

{

return 1;

}

else

{

return -1;

}

}

return 0;

}

int main()

{

char dest[] = "abcdef";

char src []= "adcdef";

int ret = my_strcmp(dest, src);

printf("%d",ret);

system("pause");

return 0;

}

#include#includevoid* my_memcpy(void* dest, const void* src, size_t count)

{

assert(src != nullptr&&dest != nullptr);

//判断dest指针和src指针是否为空,若为空抛出异常

char* tmp_dest = (char*)dest;

const char* tmp_src = (const char*)src;

//将指针dest和指针src由void强转为char,

//使得每次均是对内存中的一个字节进行拷贝

while (count--)

*tmp_dest++ = *tmp_src++;

return dest;

}

int main()

{

char dest[10];

char* src="abc";

if(sizeof(dest)

#include#includevoid* my_memmove(void* dest, const void* src, size_t count)

{

assert(src != nullptr&&dest != nullptr);

//判断dest指针和src指针是否为空,若为空抛出异常

char* tmp_dest = (char*)dest;

const char* tmp_src = (const char*)src;

if (tmp_src < tmp_dest)//当src地址小于dest地址时,从头进行拷贝

while (count--)

*tmp_dest++ = *tmp_src++;

else if (tmp_src > tmp_dest)//当src地址大于dest地址时,从后进行拷贝

{

tmp_src += count - 1;

tmp_dest += count - 1;

while (count--)

*tmp_dest-- = *tmp_src--;

}

//else(tmp_src==tmp_dest) 此时不进行任何操作

return dest;

}

int main()

{

char dest[10];

char* src="abc";

if(sizeof(dest)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值