#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;
}
字符串相关函数的实现
最新推荐文章于 2022-03-07 09:27:35 发布