您的位置:首页 > 编程语言 > C语言/C++

c++的c风格字符串函数的实现

2016-03-11 21:37 393 查看
  要注意使用断言判断传入的字符串非空。

#include <cassert>

//求字符串长度
size_t StrLen(const char *str)
{
assert(str != nullptr);
size_t len = 0;
while (*str++ != '\0')
{
++len;
}
return len;
}

//复制字符串
char* StrCpy(char *dest, const char *src)
{
assert(dest != nullptr && src != nullptr);
char *temp = dest;
while ((*dest++ = *src++) != '\0');
return temp;
}

//复制指定长度字符串
char* StrNCpy(char *dest, const char *src, size_t n)
{
assert(dest != nullptr && src != nullptr);
char *temp = dest;
size_t i = 0;
while (i++ < n && (*dest++ = *src++) != '\0');
if (*dest != '\0')
{
*dest = '\0';
}
return temp;
}

//比较字符串
int StrCmp(const char *lhs, const char *rhs)
{
assert(lhs != nullptr && rhs != nullptr);
int ret = 0;
while (!(ret = *(const unsigned char *)lhs - *(const unsigned char *)rhs) && *rhs)
{
++lhs;
++rhs;
}
if (ret > 0)
{
return 1;
}
else if (ret < 0)
{
return -1;
}
else
{
return 0;
}
}

//拼接字符串
char* StrCat(char *dest, const char *src)
{
assert(dest != nullptr && src != nullptr);
char *temp = dest;
while (*dest != '\0')
{
++dest;
}
while ((*dest++ = *src++) != '\0');
return temp;
}

//附:实现memcpy()函数
void* MemCpy(void *dest, const void *src, size_t n)
{
assert(dest != nullptr && src != nullptr);
//不可直接对void类型的指针进行操作
char *temp_dest = (char*)dest;
const char *temp_src = (char*)src;
while (n--)
{
*temp_dest++ = *temp_src++;
}
return dest;
}

//附2:实现memset()函数
void* MemSet(void *buffer, int c, size_t n)
{
assert(buffer != nullptr);
char *temp = (char*)buffer;
while (n--)
{
*temp++ = (char)c;
}
return buffer;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: