str库函数模拟实现

来源:互联网 发布:上海地铁刷卡数据 编辑:程序博客网 时间:2024/05/21 10:49

常见str函数功能表:


strcat——将字符串str2连接到str1之后,并返回指针str1

strncat——将字符串from 中至多count个字符连接到字符串to中,追加空值结束符。返回处理完成的字符串

strchr——返回一个指向str 中ch 首次出现的位置,当没有在str 中找ch到返回NULL

strrchr——返回一个指针,它指向字符ch 在字符串str,末次出现的位置,如果匹配失败,返回NULL

strcoll——比较字符串str1 和 str2, 很象strcmp. 但是, strcoll使用在目前环境中由setlocale()设定的次序进行比较。

strcmp——比较两个字符串是否相等比较字符串str1 and str2,相等返回0,大于返回大于0的数,小于返回小于0的数

strncmp——比较字符串str1 和 str2中至多n个字符

strlen——返回字符串str 的长度( 即空值结束符之前字符数目)

strcpy——复制字符串from 中的字符到字符串to,包括空值结束符。返回值为指针to

strncpy——将字符串from 中至多count个字符复制到字符串to中,如果字符串from 的长度小于count,其余部分用'\0'填补。返回处理完成的字符串

strstr——返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL

strspn——返回字符串str1中第一个不包含于字符串str2的字符的索引


代码实现:


strcat


char* MyStrcat(char *src, const char*dst){assert(src && dst);int count = 0;char* ret = src;while (*src)//如果把++合并写到上面来会多加一次{src++;}while (*src++ = *dst++){;}return ret;}

strncat


char* MyStrncat(char* str1, const char* str2,size_t n){assert(str1 && str2);char* tem = str1;while (*str1){str1++;}while (n--){if (!(*str1++ = *str2++)){return tem;}*str1 = '\0';}return tem;}


strrchr


const char* MyStrchr(const char* str, char ch){assert(str);while (*str){if (*str == ch)return str; str++;}return NULL;}

strchr


const char* MyStrrchr(const char* str,char ch){assert(str);const char* tmp = str;while (*str++)//先让指针指向\0{;}while (--str != tmp)//只要str还没有减到tmp刚开始保存的初始位置{if (*str == ch)return str;}return NULL;}


strcoll


int MyStrcoll(const char* dst, const char* src){assert(dst && src);int ret = 0;while (!(ret = *dst-*src)){dst++;src++;}if (ret > 0)return 1;else if (ret < 0)return -1;elsereturn ret;}

stcpy


char* MyStrcpy(char* dst, const char* src)//src为原字符串,dst为目标字符串{assert(src && dst);char* ret = dst;//先让ret保存dst的起始位置while (*dst++ = *src++)//将src中的值一次拷贝到dst之中{;}return dst;}

strlen


size_t MyStrlen1(const char* str)//加const防止str被修改{assert(str);//断言,防止str为空指针或者野指针的情况size_t count = 0;while (*str++){++count;}return count;}size_t MyStrlen2(const char* str){assert(str);const char* eos = str;while (*eos++);return (eos - str - 1);}

strcmp


int MyStrcmp(const char* dst, const char* src){assert(dst && src);int ret = 0;while (!(ret = *dst - *src)){src++;dst++;}if (ret < 0)return -1;else if(ret > 0)return 1;return ret;}

strncmp


int MyStrncmp(const char* str1, const char* str2, size_t n){assert(str1 && str2);int ret = 0;while (!(ret = *str1 - *str2) && n--){++str1;++str2;}if (ret > 0){return 1;}else if (ret < 0){return -1;}return ret;}


strncpy


char* MyStrncpy(char* str1, const char* str2, size_t n){assert(str1 && str2);if (!n)return str1;char* tmp = str1;while (n && (*str1++ = *str2++)){n--;}if (n){while (n--){*str1--;}str1 = '\0';}return tmp;}


strstr


const char* MyStrstr(const char*str1, const char* str2){assert(str1 && str2);while (*str1){if (*str1++ == *str2++){;}++str1;return str1;}return NULL;}

strspn


size_t MyStrspn(const char* str1, const char* str2){size_t index = 0;while (*str1++ == *str2++){index++;}return index;}





2 0
原创粉丝点击