模拟实现strcpy
char* my_strcpy(char* dst, const char*src) { assert(dst != NULL); assert(src != NULL); char *ret = dst; while (*dst = *src) { dst++, src++; } return ret; } int main() { char buf[32]; char a[] = "abcdef"; printf("%s\n", my_strcpy(buf, a)); system("pause"); return 0; }
模拟实现strcat
char *my_strcat(char* dst, char* src)
{
assert(dst != NULL);
assert(src != NULL);
char *ret = dst;
while (*dst)
{
dst++;
}
while (*dst = *src)
{
dst++, src++;
}
return ret;
}
int main()
{
char buf[32]="12345";
char a[] = "abcdef";
printf("%s\n", my_strcat(buf, a));
system("pause");
return 0;
}
模拟实现strcmp
int my_strcmp(const char* s1, const char* s2) { assert(s1 != NULL); assert(s2 != NULL); int res = 0; int ret=0; while (!(ret = *(unsigned char*)s1 - *(unsigned char*)s2) && *s1) { s1++, s2++; } if (ret < 0) { res = -1; } else if (ret>0) { res = 1; } else{ res = 0; } return(res); } int main() { char s1[]="abcd"; char s2[] = "abce"; printf("%d\n", my_strcmp(s1,s2)); system("pause"); return 0; }
模拟实现strncpy
char *my_strncpy(char *dst, const char*src, int num) { assert(dst != NULL); assert(src != NULL); char *ret = dst; while (num)//循坏num次 { *dst = *src; dst++; src++; num--; } if (*(dst - 1) != '\0')//判断是否将\0复制到字符串中 { *dst = '\0'; } return ret; } int main() { char buf[32]; char a[] = "abcdef"; printf("%s\n",my_strncpy(buf, a,4 )); system("pause"); return 0; }模拟实现strncat
char *my_strncat(char* dst, const char *src, int n) { assert(dst != NULL); assert(src != NULL); char *ret = dst; while (*dst)//将dst的指针移到‘\0'处 { dst++; } while (n) { *dst = *src; dst++, src++; n--; } if (*(dst - 1) != '\0') { *dst = '\0'; } return ret; } int main() { char buf[32] = "123456";//不能写成buf[] char a[] = "abcdef"; printf("%s\n", my_strncat(buf, a, 4)); system("pause"); return 0; }模拟实现strncmp
int my_strncmp(const char *src, const char *dst, int n) { assert(src != NULL); assert(dst != NULL); int ret = 0; while (n) { ret = *(unsigned char*)src - *(unsigned char*)dst; src++, dst++; n--; if (ret < 0) { ret = -1; } else if (ret>0) { ret = 1; } else{ ret = 0; } } return ret; } int main() { char str1[] = "abcduuh"; char str2[] = "abchuhuy"; printf("%d\n", my_strncmp(str1, str2, 4)); system("pause"); return 0; }模拟实现strstr
char *my_strstr(char*str, char*sub_str) { assert(str); assert(sub_str); char *p = NULL; char *np = NULL; char *q = NULL; p = str; while (*p) { np = p;//np始终在p的前面 q = sub_str; for (; *np&&*q&&*np == *q; np++, q++)//指针np和指针q都不能为空,且np指的内容和q的内容相等 { ; } if (*q == '\0')//说明已经找到 { return p; } else if (*np == '\0')//q还没找完,p已经找完,就没必要再找了 { break; } else{ //走到这儿说明p没到'\0',q也没到'\0',只能是*np!=*q; p++; } } return NULL; } int main() { char str1[] = "abdhadbfjhajd"; char str2[] = "adbf"; printf("%s\n", my_strstr(str1, str2)); system("pause"); return 0; }
模拟实现strchr
char *my_strchr(char *dst, char ch) { assert(dst); while (dst != NULL) { if (*dst == ch) { return dst; } else { dst++; } } return NULL; } int main() { char str[] = "abdhshb"; char ch; printf("Please enter you want to find character:"); scanf("%c", &ch); printf("%s\n", my_strchr(str, ch)); system("pause"); return 0; }
模拟实现memcpy
void *my_memcpy(void *dst, const void *src, int num) { assert(dst); assert(src); char *_dst = (char *)dst; const char *_src = (const char *)src; while (num--) { *_dst = *_src; _dst++, _src++; } return dst; } int main() { char s1[10]; char s2[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; my_memcpy(s1, s2, sizeof(s2)); system("pause"); return 0; }
模拟实现memmove
void *my_memmove(void *dst, const void *src, int num) { assert(dst); assert(src); char *_d = (char*)dst; char *_s = (char*)src; if (_d > _s&&_d < _s + num) //从右往左拷贝 { *_d += num; *_s += num; while (num--) { *_d = *_s; _d--, _s--; } } else { while (num--) { *_d = *_s; _d++, _s++; } } return dst; } int main() { char s1[10] = "abcdef"; char s2[10]; printf("%s\n", my_memmove(s2, s1, strlen(s1) + 1)); system("pause"); return 0; }