废话不多说,直接上代码,能看懂看,看不懂别看了,学习这种事,随缘就好
#include<iostream> #include<assert.h> using namespace std; size_t my_strlen(const char *str) { assert(str != NULL); if(*str == '\0') return 0; else return my_strlen(str+1) + 1; } char* my_strcpy(char *strDest, const char *strSrc) { char *start = strDest; assert(strDest != NULL&&strDest != NULL); char *ptmp_Dest = strDest; const char *ptmp_Src = strSrc; while (*ptmp_Src != '\0') { *ptmp_Dest++ = *ptmp_Src++; } *ptmp_Dest = '\0'; return start; } char *my_strncpy(char *dst, const char *src, size_t n) { char *start = dst; assert(dst != NULL&&src != NULL); while (n--) { if (*src == '\0') { *dst = '\0'; dst++; } else { *dst = *src; dst++; (char*)src++; } } return start; } //str1 > str2 : 1 //str1 == str2 : 0 //str1 < str2 : -1 int my_strcmp(const char *str1, const char *str2) { assert(str1!=NULL && str2!=NULL); if(*str1=='\0' && *str2=='\0') return 0; while(*str1!='\0' && *str2!='\0') { if(*str1 > *str2) return 1; else if(*str1 < *str2) return -1; else { str1++; str2++; } } if(*str1=='\0' && *str2!='\0') return -1; else if(*str1!='\0' && *str2=='\0') return 1; return 0; } int my_strncmp(const char *str1, const char *str2, size_t n) { assert(str1 != NULL&&str2 != NULL); while (n && (*str1 == *str2)) { (char*)str1++; (char*)str2++; n--; } if (n > 0) return *str1 - *str2; return *(str1-1) - *(str2-1); } char* my_strcat(char *strDest, const char *strSrc) { assert(strDest!=NULL && strSrc!=NULL); char *ptmp_Dest = strDest; const char *ptmp_Src = strSrc; while(*ptmp_Dest != '\0') ++ptmp_Dest; while(*ptmp_Src != '\0') *ptmp_Dest++ = *ptmp_Src++; *ptmp_Dest = '\0'; return strDest; } char *my_strncat(char *dst, const char *src, size_t n) { char *start = dst; assert(dst != NULL&&src != NULL); while (*dst) dst++; while (n--) *dst++ = *(char*)src++; return start; }