目录
1.strlen函数
#include <stdio.h>
int My_strlen(const char* s) {
char* start = s;
char* end = s;
while (*end) {
end++;
}
return end - start;
}
int main() {
int num = 0;
const char* str = "asdfghjkl";
num = My_strlen(str);
printf("%d", num);
}
int My_strlen(const char *s)
{
if (*s == '\0') {
return 0;
}
return 1 + my_strlen(s+1);
}
2.srtcpy函数
#include <stdio.h>
#include <assert.h>
char* My_strcpy(char* buf, const char* str) {
assert(buf != NULL);
assert(str != NULL);
char* ret = buf;
while (*buf = *str) {
str++;
buf++;
}
return ret;
}
int main() {
const char* str = "asdfghjkl";
char buf[16] = { 0 };
printf("%s", My_strcpy(buf, str));
}
3.strcat函数
#include <stdio.h>
#include <assert.h>
char* My_strcat(char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
char* ret = str1;
while (*str1) {
str1++;
}
while (*str1 = *str2) {
str1++;
str2++;
}
return ret;
}
int main() {
char str1[32] = "asdfghjkl";
char str2[32]= "zxcvbnm";
printf("%s", My_strcat(str1, str2));
}
4.strcmp函数
#include <stdio.h>
#include <assert.h>
int My_strcmp(const char* s1, const char* s2)
{
assert(s1 != NULL);
assert(s2 != NULL);
int ret = 0;
const unsigned char* _s1 = (const unsigned char*)s1;
const unsigned char* _s2 = (const unsigned char*)s2;
while (!(ret = (*_s1 - *_s2)) && *_s1) {
_s1++;
_s2++;
}
if (ret < 0) {
ret = -1;
}
else if (ret > 0) {
ret = 1;
}
else {
ret = 0;
}
return ret;
}
int main() {
const char str1[32] = "asdfghjkl";
const char str2[32]= "asdfghjk";
printf("%d", My_strcmp(str1, str2));
}
5.strstr函数
#include <stdio.h>
#include <assert.h>
const char* My_strstr(const char* target,const char* sub) {
assert(target != NULL);
assert(sub != NULL);
const char* start = target;
const char* move = NULL;
const char* sub_start = NULL;
while (*start) {
move = start;
sub_start = sub;
while (*move && *start && *move == *sub_start) {
move++;
sub_start++;
if (*sub_start) {
return start;
}
}
start++;
}
return NULL;
}
6.memcpy函数
#include <stdio.h>
#include <assert.h>
char* My_memcpy(char* _buf,const char * _str,int num) {
assert(_buf != NULL);
assert(_str != NULL);
if (num == 0) {
return _buf;
}
unsigned char* buf = (unsigned char*)_buf;
unsigned char* str = (unsigned char*)_str;
int n = strlen(str);
if (num > n) {
printf("enter error!");
}
while (num) {
*buf = *str;
buf++;
str++;
num--;
}
return _buf;
}
int main() {
const char* str = "asdfghjk";
char buf[16] = { 0 };
int num = 0;
scanf_s("%d", &num);
printf("%s", My_memcpy(buf, str, num));
}