字符串长度函数的实现
int my_strlen(const char* str) {
int count = 0;
assert(str != NULL);
while (*str != '\0') {
count++;
str++;
}
return count;
}
字符串复制函数的实现
char * my_strcpy(char* dest, char* src) {
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (*src != '\0') {
*dest = *src;
dest++;
src++;
}
*dest = *src;
return ret;
}
简化
char * my_strcpy(char* dest, char* src) {
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (*dest++ = *src++) {
;
}
return ret;
}
字符串追加函数的实现
char* my_strcat(char* dest, const char* str) {
assert(dest != NULL);
assert(str != NULL);
char* ret = dest;
//找到\0的位置
while (*dest != '\0') {
dest++;
}
while (*dest++ = *str++) {
;
}
return ret;
}
字符串比较函数实现
int my_strcmp(const char* str1, const char* str2) {
while (*str1 == *str2) {
if (*str1 == '\0') {
return 0;
}
str1++;
str2++;
}
return (*str1 - *str2);
}
寻找子串函数的实现
char* my_strstr(const char* p1, const char* p2) {
assert(p1 != NULL);
assert(p2 != NULL);
char* s1= (char *)p1;
char* s2 = (char*)p2;
char* cur = (char*)p1;
if (*p2 == '\0') {
return p1;
}
while (p1!='\0') {
s1 = cur;
s2 = (char*)p2;
while ((*s1!='\0')&&(*s2!='\0')&&(*s1==*s2)) {
s1++;
s2++;
}
if (*s2 == '\0') {
return cur;//找到子串
}
cur++;
}
return NULL;//找不到子串
}
内存复制函数实现(不能实现内存重叠情况的拷贝)
void* my_memcpy(void* dest, const void* src, size_t num) {
assert(src != NULL);
void* ret = dest;
while (num--) {
*(char*)dest = *(char*)src;
++(char*)dest;
++(char*)src;
}
return ret;
}
内存复制函数实现(可以实现内存重叠情况的拷贝)
void* my_memmove(void* dest, const void* src, size_t count) {
assert(dest != NULL);
assert(src != NULL);
void* ret = dest;
if (dest < src) {
//从前往后拷贝
while (count--) {
*(char*)dest = *(char*)src;
++(char*)dest;
++(char*)src;
}
}
else {
//从后往前拷贝
while (count--) {
*((char*)dest + count) = *((char*)src + count);
}
}
return ret;
}