该函数的作用是传入字符串首元素地址,返回字符串的长度,因此可以用指针解引用来判断是否到达末尾元素,当指针解引用为0时字符串即到尾部了('/0'为0)
#include<stdio.h> int my_strlen(const char* str) { int count = 0; while (*str) { count++; str++; } return count; } int main() { char ch[] = "abcd"; printf("%d", my_strlen(ch)); }
该函数的作用是将源头字符串拷贝到目标字符串,需要保证的是,目标字符串的长度要比源头字符串长,否则拷贝不下,函数传入两个字符串的首地址,判断结束条件与strlen函数一致.
void my_strcopy(char* desnation, char* souce) { assert(desnation && souce); while (*souce != '\0') { *desnation = *souce; desnation++; souce++; } }
该函数的作用是比较两个字符串,因此可使用两个分别代表两个字符串首地址的指针来依次判断,如果p1大于p2则返回1,小于返回-1,相等则返回0,值得一提的是,当有一方到达末尾或者两方同时到达末尾时,要另外在循坏外面再进行一次判断.
int my_strcmp(const char* p1, const char* p2) { while (*p1 != '\0' && *p2 != '\0') { if (*p1 > *p2) { return 1; } else if (*p1 < *p2) { return -1; } p1++; p2++; } int k = 0; k = *p1 - *p2; if (k == 0) return 0; else if (k > 0) return 1; else return -1; }
该函数的作用是将目标字符串的末尾再加上一个字符串,需要保证目标字符串有足够的长度,且在末尾也要加上'/0'.
char* my_strcat(char *p1,const char *p2) { char* ret = p1; while (*p1 != '\0') { p1++; } while (*p2 != '\0') { *p1 = *p2; p1++; p2++; } *p1 = *p2; return ret; }
该函数的作用是再目标字符串中寻找一个字符串,如果找到了就返回首字符地址,可先用循环找到第一个相同字符,然后创建一个指针记下这个地址,然后再往下进行判断.
char* my_strstr(const char* str1, const char* str2) { char* p1 = str1; while (*p1 != *str2) { p1++; } char* p3 = p1; while (*p3 != '\0') { char* p4 = p3; char* p2 = str2; while (*p2 != '\0') { if (*p4 != *p2) break; p4++; p2++; } if (*p2 == '\0') return p3; p3++; } }
该函数作用是将一个字符串的前n个字节拷贝到目标字符串上,返回目标字符串的首地址,此函数可以在两个不同字符串上进行操作,但无法在同一字符串操作.
void* my_memcpy(void* dest, const void* src, size_t n) { assert(dest && src); void* p = dest; while (n--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } return p; } void test1() { char ch1[] = "xxxxxxxxx"; char ch2[] = "aaaaaaaaa"; my_memcpy(ch1, ch2, 3); printf("%s", ch1); } int main() { test1(); }
相当于是memcpy的升级版本,函数功能相同,但此函数可以在同一字符串上进行操作,当目标字符串首地址小于拷贝字符串时,采用从左到右拷贝,反之采用从右向左拷贝.
void* my_memmove(void* dest, const void* src, size_t n) { void* p = dest; if (dest < src) { while(n--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } else { while (n--) { *((char*)dest + n) = *((char*)src + n); } } return p; } void test2() { char arr1[] = "aacbbbb"; my_memmove(arr1, arr1 + 3, 2); printf("%s", arr1); } int main() { test2(); }
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!