字符串相关函数的实现

来源:互联网 发布:大数据分析师就业形势 编辑:程序博客网 时间:2024/06/05 10:43
#include<iostream>#include<cassert>using namespace std;/** 字符串相关函数*/char *mystrcpy(char *dest, const char *src){assert(dest!=NULL && src!=NULL); char *ret = dest;while( (*dest++ = *src++) != '\0')/*nothing*/ ;return ret;}char *mystrncpy(char *dest, const char*src, size_t count){assert(dest!=NULL && src!=NULL); char *ret = dest;while(count--){if( (*dest++ = *src++) != '\0')/*nothing*/ ;}return ret;}char *mystrcat(char *dest, const char *src){assert(dest!=NULL && src!=NULL); char *ret = dest;while(*dest != '\0'){++dest;}while( (*dest++ = *src++) != '\0' )/*nothing*/;return ret;}char *mystrncat(char *dest, const char *src, size_t count){char *ret = dest;if(count != 0){while(*dest != '\0'){++dest;}while( (*dest++ = *src++) != '\0'){if(0 == --count){*dest = '\0';break;}}}return ret;}int mystrcmp(const char *str1, const char *str2){assert(str1!=NULL && str2!=NULL); int count = 0;unsigned char c1, c2;while(*str1 && *str2){c1 = *str1++;c2 = *str2++;if(c1 == c2){continue;}return c1>c2 ? 1:-1;}return count;}int mystrncmp(const char *str1, const char *str2, size_t num){assert(str1!=NULL && str2!= NULL); int count = 0;unsigned char c1, c2;while(num-- != 0){c1 = *str1++;c2 = *str2++;if(c1 == c2){continue;}return c1>c2 ? 1:-1;}return count;}size_t mystrlen(const char *str){assert(str != NULL);const char *end = str;while(*end != '\0')++end;return end - str;}//思路将所有类型都转化为char* 然后再依次进行拷贝void *mymemset(void *dest, int val, size_t count){char *p = (char *)dest;while(count--){*p++ = val;}return dest;}//不能解决自身拷贝重叠时的问题void *mymemcpy(void *dest, const void *src, size_t count){char *ret = (char *)dest;const char *p = (char *)src;while(count--){*ret++ = *p++;}return dest;}//memcpy的增强版 解决了拷贝自身重叠的问题void* mymemmove(void *dest, const void *src, size_t count){if(dest <= src){mymemcpy(dest, src, count);}else{char *ret = (char *)dest;const char *p = (char *)src;ret += count;p += count;while(count--){*--ret = *--p;}}return dest;}//测试用例int main(void){char dest[16] = "main";char src[] = {"main hello"};/*mystrcpy(dest, src);cout<<dest<<endl;*//*mystrncpy(dest, src, -1);cout<<dest<<endl;*//*mystrcat(dest, src);cout<<dest<<endl;*//*mystrncat(dest, src, 3);cout<<dest<<endl;*///cout<<mystrcmp(src, dest)<<endl;//cout<<mystrncmp(src, dest, 5)<<endl;//cout<<mystrlen(src)<<endl;/*mymemset(src, 0, sizeof(src));cout<<src<<endl;*//*mymemcpy(dest, src, sizeof(src));cout<<dest<<endl;*//*mymemcpy(src+2, src, sizeof(src)-3);cout<<src<<endl;*//*mymemmove(src+2, src, sizeof(src)-3);cout<<src<<endl;*/return 0;}

0 0
原创粉丝点击