目录
字符串函数模拟实现
1、strlen模拟实现
2、strcpy模拟实现
3、strncpy模拟实现
4、strcat模拟实现
5、strncat模拟实现
6、strcmp模拟实现
7、strncmp模拟实现
8、strstr模拟实现
9、测试案例代码
字符串函数模拟实现
1、strlen模拟实现
size_t my_strlen(const char* str){assert(str);size_t ret = 0;while (*str){str++;ret++;}return ret;}
2、strcpy模拟实现
char* my_strcpy(char* dest, const char* src){assert(dest && src);char* ret = dest;while (*dest++ = *src++){;}return ret;}
3、strncpy模拟实现
char* my_strncpy(char* dest, const char* src, size_t sz){assert(dest && src);char* ret = dest;while (sz){*dest++ = *src++;sz--;}if (sz){while (--sz){*dest++ = '\0';}}return dest;}
4、strcat模拟实现
char* my_strcat(char* dest, const char* src){assert(dest && src);char* ret = dest;while (*dest){dest++;}while (*dest++ = *src++){;}return ret;}
5、strncat模拟实现
char* my_strncat(char* dest, const char* src,int sz){assert(dest && src);char* ret = dest;while (*dest){dest++;}while (sz--){*dest++ = *src++;}dest = '\0';return ret;}
6、strcmp模拟实现
int my_strcmp(const char* str1, const char* str2){int ret = 0;while (*str1 == *str2){if (*str1 == '\0'){return 0;}str1++;str2++;}//代码一//if (*str1 > *str2)//{//return 1;//}//else//{//return -1;//}//代码二return *str1 - *str2;}
7、strncmp模拟实现
int my_strncmp(const char* str1, const char* str2,int sz){int ret = 0;while (sz-- && !(ret = (unsigned char)*str1 - (unsigned char)*str2)){str1++;str2++;}return ret;}
8、strstr模拟实现
char* my_strstr(const char* str1,const char* str2){assert(str1 && str2);const char* s1 = str1;const char* s2 = str2;char* cp = str1;while (*cp){s1 = cp;s2 = str2;while (*s1 && *s2 && (* s1 == *s2)){s1++;s2++;}if (*s2 == '\0'){return cp;}cp++;}return NULL;}
9、测试案例代码
int main(){char arr1[30] = "hello world";char arr2[50] = "sakura0908";printf("arr2的长度为 %zd\n", my_strlen(arr2));char arr3[30] = { 0 };my_strcpy(arr3, arr2);printf("arr3 = %s\n", arr3);char arr4[30] = { 0 };my_strncpy(arr4, arr2, 6);printf("arr4 = %s\n", arr4);char arr5[50] = "csdn";my_strcat(arr2, arr5);printf("追加arr5之后的arr2为:%s\n", arr2);char arr6[50] = "123456789";my_strncat(arr2, arr6, 5);printf("追加arr6之后的arr2为:%s\n", arr2);char arr7[50] = "sakura0908csdn12345";if (!my_strcmp(arr2, arr7)){printf("arr2和arr7相同\n");printf("arr2 = %s\narr7 = %s\n", arr2, arr7);}else{printf("arr2和arr7不相同\n");printf("arr2 = %s\narr7 = %s\n", arr2, arr7);}char arr8[50] = "sakura0908.";if(!my_strncmp(arr2, arr8,12)){printf("arr2和arr8相同\n");printf("arr2 = %s\narr8 = %s\n", arr2, arr8);}else{printf("arr2和arr8不相同\n");printf("arr2 = %s\narr8 = %s\n", arr2, arr8);}return 0;}