网站经营网络备案信息管理系统/小说排行榜百度搜索风云榜
模拟实现 :strncpy ,strncat ,strncmp ,strchr ,strrstr
1.strncpy函数的功能是拷贝一个字符串中的前n个字符到另一个字符串,以下是函数实现部分:
//拷贝src所指向的字符串的前count个字符到dest所指向的字符串
char* my_strncpy(char* dest, const char*src, size_t count)
{int i = 0;char* temp = dest;assert(dest!=NULL&&src!=NULL);while (((i++)<count) && (*temp++ = *src++) != '\0'){;}if (*(temp) != '\0'){*temp = '\0';}return 0;
}
2.strncat函数是把src所指向的字符串的前count个字符链接到dest所指向的字符串,自动把dest所指向的字符串中的‘\0’去掉,并且在链接完成后在字符串末尾补上‘\0’。
以下是函数实现部分:
char* my_strncat(char*dest, const char*src, size_t count)
{assert(dest != NULL&&*src != NULL);char* temp = dest;while (*temp != '\0'){++temp;}while (count != 0 && (*temp++ = *src++) != '\0'){--count;}return dest;
}
3.strncmp函数的功能是比较str1和str2所指向的字符串的前count个字符,若 str1 > str2,则返回一个大于0的 整数;若 str1 < str2则返回一个小于 0 的整数;若str1 = str2 则返回 0 。
以下是函数实现部分:
#define false 'z'-'A'
int my_strncmp(const char*str1, const char*str2, size_t count)
{if (str1 == NULL || str2 == NULL || count < 0){return false;}if (count == 0){return 0;}while (count-- && (*str1 == *str2) && str2){str1++;str2++;}return *(unsigned char*)str1 - *(unsigned char*)str2;
}
4.strchr函数的功能是在src 所指向的字符串中查找字符 ch,并返回字符ch第一次出现在 src所指向的位置。
以下是函数实现部分:
char* my_strchr(const char* src, const char ch)
{if (src == NULL){return NULL;}const char*ptr = src;while (*ptr != '\0'){if (ch == *ptr){return (char*)ptr;}++ptr;}return NULL;
}
5.strrstr函数的功能是在dst所指向的字符串中查找src所指向的字符串,并返回src指向的字符串在dst中最后出现的位置。
以下是函数的实现部分:
char *my_strrstr(const char *dst, const char *src)
{assert(dst);assert(src);const char *pdst = dst;const char *psrc = src;char *right = NULL;while (*dst){while (*pdst == *psrc){if (*pdst == '\0')//如果*pdst为‘\0'则已经找到最后一个 return right = (char *)dst;else{pdst++;psrc++;}}if (*psrc == '\0') //找到一个,但不确定是不是最后一个 right = (char *)dst;pdst = ++dst;psrc = src;}return right;
}