c++的c风格字符串函数的实现
要注意使用断言判断传入的字符串非空。
#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风格字符串函数的实现的更多相关文章
- c风格字符串函数
		十一.C 风格字符串 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat( ... 
- 标准库string与C风格字符串
		返回字符串的长度 string标准库 #include<iostream> #include<cstring> using namespace std; int main() ... 
- 第6章 字符串(上)——C风格字符串
		6.1 C-strings(C 风格字符串) C风格字符串: 字符数组是元素为字符型的数组,字符串是以空字符'\0' 作为数组最后一个元素的字符数组. 如果指定了数组的大小,而字符串的长度又小于数组大 ... 
- C风格字符串与C++风格字符串
		C风格字符串与C++风格字符串 C风格字符串:对字符串进行操作的 C 函数定义在头文件<cstring>中: 1. 字符串定义:char* result: 2. 字符串的最后一个字符是nu ... 
- PHP函数积累总结(Math函数、字符串函数、数组函数)
		Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ... 
- string字符串转C风格字符串 进而转换为数字
		要求如题 头文件stdlib.h中有一个函数atof() 可以将字符串转化为双精度浮点数(double) double atof(const char *nptr); 此字符串为C风格字符串,因此需要 ... 
- C++ 标准头文件与C头文件区别与联系以及C风格字符串
		1.cstdlib是C++里面的一个常用头文件, 等价于C中的<stdlib.h>. 2.一般一个带“.h” 扩展名的库文件,比如iostream.h.这是延续C语言的,为了兼容C.在新标 ... 
- C 和 C++  字符串函数操作
		1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长 ... 
- 07 --C语言字符串函数
		1)字符串操作 复制 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strdup(char *str) 将串拷贝到新建的位置处 ... 
随机推荐
- 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树
			EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ... 
- Python 之各种推导式玩法
			推导式套路 之前我们已经学习了最简单的列表推导式和生成器表达式.但是除此之外,其实还有字典推导式.集合推导式等等. 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. variable ... 
- (转)nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
			Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ... 
- Java多线程(三)
			本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 1 public class ThreadTest { 2 3 public static v ... 
- python 封装时间常用操作方法-time,datetime
			封装脚本: #encoding=utf-8import timefrom datetime import timedelta,date def date_time_chinese(): prin ... 
- 五,动态库(dll)的封装与使用
			在项目开发中,我们经常会使用到动态库(dll),要么是使用别人的动态库,要么是将功能函数封装为动态库给别人用.那么如何封装和使用动态库呢?以下内容为你讲解. 1.动态库的封装 以vs2010为例,我们 ... 
- Puppeteer前端自动化测试实践
			本篇内容将记录并介绍使用Puppeteer进行自动化网页测试,并依靠约定来避免反复修改测试用例的方案.主要解决页面众多时,修改代码导致的牵连错误无法被发现的运行时问题.文章首发于个人博客.对前端感兴趣 ... 
- 利用ansible进行自动化构建etcd集群
			上一篇进行了手动安装etcd集群,此篇利用自动化工具ansible为三个节点构建etcd集群 环境: master:192.168.101.14,node1:192.168.101.15,node2: ... 
- 在outlook中查找Skype的聊天记录
			在outlook中和inbox平级,有一个Conversation History 
- Codeforces Round #402 (Div. 2) A,B,C,D,E
			A. Pupils Redistribution time limit per test 1 second memory limit per test 256 megabytes input stan ... 
