第三十六题 标准库字符操作函数的实现
来源:互联网 发布:java实现加减乘除 编辑:程序博客网 时间:2024/05/21 19:31
char *strcpy(char *dst,char *src){assert(dst!=nullptr&&src!=nullptr);if (dst==src){return dst;}char *returnstr=dst;while ((*dst++=*src++)!='\0');return returnstr;}char *strncpy(char *dst,char *src,int count){assert(dst!=nullptr&&src!=nullptr);char *resultstr=dst;while(count--&&src!='\0'){*dst++=*src++;}*dst='\0';return dst;}int strchr(const char *str, char c) {assert(str!=nullptr); for (size_t i=0;*(str+i)!='\0';++i) {if (*(str+i)==c){return i;} }return 0;}int strcmp(const char *s, const char *t) { assert(s != NULL && t != NULL); while (*s && *t && *s == *t) { ++ s; ++ t; } return (*s - *t); }char *strcat(char *strDes, const char *strSrc) { assert((strDes != nullptr) && (strSrc != nullptr)); char *address = strDes; while (*strDes != '\0') ++ strDes; while ((*strDes ++ = *strSrc ++) != '\0'); return address; } int strlen(const char *str) { assert(str != nullptr); int len = 0; while (*str ++ != '\0') ++ len; return len; } char *strdup_(char *strSrc) { if(strSrc!=nullptr) { char *start=strSrc; int len=0; while(*strSrc++!='\0') len++; char *address=(char *)malloc(len+1); assert(address != nullptr); while((*address++=*start++)!='\0'){}return address-(len+1); } return nullptr; } char *strstr(const char *strSrc, const char *str) { assert(strSrc != nullptr && str != nullptr); const char *s = strSrc; const char *t = str; for (; *strSrc != '\0'; ++ strSrc) { for (s = strSrc, t = str; *t != '\0' && *s == *t; ++s, ++t){}if (*t == '\0') return (char *) strSrc; } return nullptr; } char *strncat(char *strDes, const char *strSrc, unsigned int count) { assert((strDes != nullptr) && (strSrc != nullptr)); char *address = strDes; while (*strDes != '\0') ++ strDes; while (count -- && *strSrc != '\0' ) *strDes ++ = *strSrc ++; *strDes = '\0'; return address; } int strncmp(const char *s, const char *t, unsigned int count) { assert((s != nullptr) && (t != nullptr)); while (*s && *t && *s == *t && count --) { ++ s; ++ t; } return (*s - *t); } char *strpbrk(const char *strSrc, const char *str) { assert((strSrc != nullptr) && (str != nullptr)); const char *s; while (*strSrc != '\0') { s = str; while (*s != '\0') { if (*strSrc == *s) return (char *) strSrc; ++ s; } ++ strSrc; } return nullptr; } int strcspn(const char *strSrc, const char *str) { assert((strSrc != nullptr) && (str != nullptr)); const char *s; const char *t = strSrc; while (*t != '\0') { s = str; while (*s != '\0') { if (*t == *s) return t - strSrc; ++ s; } ++ t; } return 0; } int strspn(const char *strSrc, const char *str) { assert((strSrc != nullptr) && (str != nullptr)); const char *s; const char *t = strSrc; while (*t != '\0') { s = str; while (*s != '\0') { if (*t == *s) break; ++ s; } if (*s == '\0') return t - strSrc; ++ t; } return 0; } char *strrchr(const char *str, int c) { assert(str != nullptr); const char *s = str; while (*s != '\0') ++ s; for (-- s; *s != (char) c; -- s) if (s == str) return nullptr; return (char *) s; } char* strrev(char *str) { assert(str != nullptr); char *s = str, *t = str, c; while (*t != '\0') ++ t; for (-- t; s < t; ++ s, -- t) { c = *s; *s = *t; *t = c; } return str; } char *strnset(char *str, int c, unsigned int count) { assert(str != nullptr); char *s = str; for (; *s != '\0' && s - str < count; ++ s) *s = (char) c; return str; } char *strset(char *str, int c) { assert(str != nullptr); char *s = str; for (; *s != '\0'; ++ s) *s = (char) c; return str; } char *strtok(char *strToken, const char *str) { assert(str != nullptr); static char *last; if (strToken == nullptr && (strToken = last) == nullptr) return nullptr; char *s = strToken; const char *t = str; while (*s != '\0') { t = str; while (*t != '\0') { if (*s == *t) { last = s + 1; if (s - strToken == 0) { strToken = last; break; } *(strToken + (s - strToken)) = '\0'; return strToken; } ++ t; } ++ s; } return nullptr; } char *strupr(char *str) { assert(str != nullptr); char *s = str; while (*s != '\0') { if (*s >= 'a' && *s <= 'z') *s -= 0x20; s ++; } return str; } char *strlwr(char *str) { assert(str != nullptr); char *s = str; while (*s != '\0') { if (*s >= 'A' && *s <= 'Z') *s += 0x20; s ++; } return str; } void *memcpy(void *dest, const void *src, unsigned int count) { assert((dest != nullptr) && (src != nullptr)); void *address = dest; while (count --) { *(char *) dest = *(char *) src; dest = (char *) dest + 1; src = (char *) src + 1; } return address; } void *memccpy(void *dest, const void *src, int c, unsigned int count) { assert((dest != nullptr) && (src != nullptr)); while (count --) { *(char *) dest = *(char *) src; if (* (char *) src == (char) c) return ((char *)dest + 1); dest = (char *) dest + 1; src = (char *) src + 1; } return nullptr; } void *memchr(const void *buf, int c, unsigned int count) { assert(buf != nullptr); while (count --) { if (*(char *) buf == c) return (void *) buf; buf = (char *) buf + 1; } return nullptr; } int memcmp(const void *s, const void *t, unsigned int count) { assert((s != nullptr) && (t != nullptr)); while (*(char *) s && *(char *) t && *(char *) s == *(char *) t && count --) { s = (char *) s + 1; t = (char *) t + 1; } return (*(char *) s - *(char *) t); } void *memmove(void *dest, const void *src, unsigned int count) { assert(dest != nullptr && src != nullptr); char* pdest = (char*) dest; char* psrc = (char*) src; //pdest在psrc后面,且两者距离小于count时,从尾部开始移动. 其他情况从头部开始移动 if (pdest > psrc && pdest - psrc < count) { while (count--) { *(pdest + count) = *(psrc + count); } } else { while (count--) { *pdest++ = *psrc++; } } return dest; } void *memset(void *str, int c, unsigned int count) { assert(str != nullptr); void *s = str; while (count --) { *(char *) s = (char) c; s = (char *) s + 1; } return str; }
0 0
- 第三十六题 标准库字符操作函数的实现
- C++复习之实现标准库的字符串操作函数
- 字符操作函数的模拟实现
- 标准C++库的原子操作函数
- 第二十六课 实现线性表基本操作的函数 【项目1-4】
- C标准库中字符与数字的转换函数
- C/C++操作数重载函数标准库实现
- 第三章第三十六题
- C 标准库 atoi 函数的实现
- C 标准库 abs 函数的实现
- C 标准库 atof 函数的实现
- C 标准库 bsearch 函数的实现
- C 标准库 strcpy 函数的实现
- C 标准库 strcat 函数的实现
- C 标准库 strchr 函数的实现
- C 标准库 strcmp 函数的实现
- C 标准库 strcspn 函数的实现
- C 标准库 strlen 函数的实现
- 运算符重载与友员函数
- poj 1936
- c++ static关键字的用法
- 鼠标响应文字跳动效果
- Lucene相关度排序
- 第三十六题 标准库字符操作函数的实现
- 分享一百多套开发视频教程的下载地址
- u-boot环境变量的设置与使用
- 跟着笨鸟一步一步学习spring开发(二、学习spring rest接口开发)
- 如何看国外文献的方法总结
- 黑马程序员 继承小结
- LZW编解码
- sql 笔记
- 纯css实现粒子效果