c语言中常用的字符串库函数,【算法】【字符串】C语言常用库函数实现

strcpy

#include

#include

using namespace std;

char * my_strcpy(char* str1,const char* str2)

{

char* p = str1;

assert(str1 != NULL && str2 != NULL);

while((*p++ = *str2++) != '\0');

return p;

}

int main()

{

const char str[] = "abcdef";

char s[] = "";

my_strcpy(s, str);

cout << s << endl;

return 0;

}

strcat

#include

#include

#include

using namespace std;

char* my_strcat(char* dest, const char* src)

{

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

char *p = dest;

while(*p != '\0') p++;

while((*p++ = *src++) != '\0');

return p;

}

int main()

{

const char str[] = "abcdef";

char s[] = "e";

my_strcat(s, str);

cout << s << endl;

return 0;

}

reverse

#include

#include

#include

using namespace std;

char* my_reverse(char* str)

{

assert(str != NULL);

char *p = str;

int len = 0;

while(*p++ != '\0') len++;

int l = 0, r = len - 1;

while(l < r)

{

str[l] = str[l] ^ str[r];

str[r] = str[l] ^ str[r];

str[l] = str[l] ^ str[r];

l++;

r--;

}

return str;

}

int main()

{

char str[] = "abcdef";

cout << my_reverse(str) << endl;

cout << str << endl;

return 0;

}

strstr

#include

#include

#include

using namespace std;

char* my_strstr(char* str1, char* str2)

{

assert(str1 != NULL && str2 != NULL);

while (*str1 != '\0')

{

char* src = str1;

char* tmp = str2;

do

{

if (*tmp == '\0')

return str1;

} while (*tmp++ == *src++);

str1++;

}

return NULL;

}

int main()

{

char str[] = "abcdef";

char str2[] = "x";

if (my_strstr(str, str2) != NULL)

cout << my_strstr(str, str2) << endl;

else

cout << "NULL" << endl;

return 0;

}

memcpy

#include

#include

#include

using namespace std;

void* my_memcpy(void* dest, void* src, size_t size)

{

assert(dest != NULL && src != NULL && size > 0);

char *tmp_dst = (char *)dest;

char *tmp_src = (char *)src;

if(tmp_src < tmp_dst && tmp_dst < tmp_src + size)

{

tmp_dst = tmp_dst + size - 1;

tmp_src = tmp_src + size - 1;

while(size--) *tmp_dst-- = *tmp_src--;

}

else

while(size--) *tmp_dst++ = *tmp_src++;

return dest;

}

int main()

{

char str[] = "abcdef";

cout << my_memcpy(str + 2, str, 2) << endl;

cout << str << endl;

return 0;

}

atoi

#include

#include

#include

using namespace std;

int my_atoi(char *str)

{

assert(str != NULL);

char *tmp = str;

while(*tmp != '\0' && *tmp == ' ') tmp++;

int flag = 0;

if(*tmp == '-') flag = 1, tmp++;

if(*tmp == '+') tmp++;

int sum = 0;

while(*tmp >= '0' && *tmp <= '9')

{

int val = *tmp - '0';

if(sum > 0x7fffffff / 10 || (sum == 0x7fffffff / 10) && val > 0x7fffffff % 10)

return flag ? 0x80000000 : 0x7fffffff;

sum = sum * 10 + val;

tmp++;

}

return flag ? -sum : sum;

}

int main()

{

char str[] = " 2147483649";

cout << my_atoi(str) << endl;

cout << str << endl;

cout << 0x80000000 << endl; // 负数 符号位为1 以反码表示

cout << 0x7fffffff << endl; // 整数 符号位为0

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值