要注意使用断言判断传入的字符串非空。

 #include <cassert>

 //求字符串长度
size_t StrLen(const char *str)
{
assert(str != nullptr);
size_t len = ;
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 = ;
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 = ;
while (!(ret = *(const unsigned char *)lhs - *(const unsigned char *)rhs) && *rhs)
{
++lhs;
++rhs;
}
if (ret > )
{
return ;
}
else if (ret < )
{
return -;
}
else
{
return ;
}
} //拼接字符串
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;
}

c++的c风格字符串函数的实现的更多相关文章

  1. c风格字符串函数

    十一.C 风格字符串  1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat(p, p1) 附加字符串  strncat( ...

  2. 标准库string与C风格字符串

    返回字符串的长度 string标准库 #include<iostream> #include<cstring> using namespace std; int main() ...

  3. 第6章 字符串(上)——C风格字符串

    6.1 C-strings(C 风格字符串) C风格字符串: 字符数组是元素为字符型的数组,字符串是以空字符'\0' 作为数组最后一个元素的字符数组. 如果指定了数组的大小,而字符串的长度又小于数组大 ...

  4. C风格字符串与C++风格字符串

    C风格字符串与C++风格字符串 C风格字符串:对字符串进行操作的 C 函数定义在头文件<cstring>中: 1. 字符串定义:char* result: 2. 字符串的最后一个字符是nu ...

  5. PHP函数积累总结(Math函数、字符串函数、数组函数)

    Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ...

  6. string字符串转C风格字符串 进而转换为数字

    要求如题 头文件stdlib.h中有一个函数atof() 可以将字符串转化为双精度浮点数(double) double atof(const char *nptr); 此字符串为C风格字符串,因此需要 ...

  7. C++ 标准头文件与C头文件区别与联系以及C风格字符串

    1.cstdlib是C++里面的一个常用头文件, 等价于C中的<stdlib.h>. 2.一般一个带“.h” 扩展名的库文件,比如iostream.h.这是延续C语言的,为了兼容C.在新标 ...

  8. C 和 C++ 字符串函数操作

    1)字符串操作  strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长 ...

  9. 07 --C语言字符串函数

    1)字符串操作  复制 strcpy(p, p1)      复制字符串 strncpy(p, p1, n)  复制指定长度字符串 strdup(char *str)      将串拷贝到新建的位置处 ...

随机推荐

  1. Linux(CentOS)系统下搭建svn服务器

    由于GitHub的私有项目需要收费,gitlab对服务器的要求必须是4GB内存以上.对于一些个人的小型项目,想要免费的版本控制工具来管理自己的代码,又不想代码公开,无疑SVN是比较好的选择.windo ...

  2. cocos代码研究(14)Widget子类Button学习笔记

    理论基础 表示一个按钮组件. 按钮可以被按下,或者点击, 并且在按下或者点击之后,可以由用户指定一个动作来执行,继承自 Widget. 代码部分 static Button * create ()创建 ...

  3. iOS重签名脚本

    unzip xxx.ipa //解压ipa rm -rf Payload/ xxx.app/_CodeSignature //删除旧签名 cp newEmbedded.mobileprovision ...

  4. Django快速搭建博客系统

    Django快速搭建博客系统 一.开发环境 Windows 7(64bit) python 3.6   https://www.python.org/ Django 2.0  https://www. ...

  5. 20145311 《Java程序设计》第5周学习总结

    20145311 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 8.1语法与继承结构 8.1.1Try.catch java中所有的错误都会打包为对象,可以try catc ...

  6. 20145326 《Java程序设计》实验一实验报告

    北京电子科技学院(besti)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...

  7. 全局变量的使用【C++/Qt】

    转:https://blog.csdn.net/caoshangpa/article/details/51104022 一.使用extern关键字 cglobal.h #ifndef CGLOBAL_ ...

  8. 【javascript】数据结构-集合

    <!DOCTYPE html> <html> <head> <title>集合</title> <meta charset=" ...

  9. HDU 4990 Reading comprehension(矩阵快速幂)题解

    思路: 如图找到推导公式,然后一通乱搞就好了 要开long long,否则红橙作伴 代码: #include<set> #include<cstring> #include&l ...

  10. 使用SpringBoot发送邮件

    最后发送成功后,感觉SpringBoot真的很强大. http://www.ykmimi.com/email ↑待加入email输入的重载(可以不上传文件或可以不填写主内容) ↑待加入邮箱RegExp ...