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; }
相关文章推荐
- C++ YYzhaopin
- MCU内存/C语言高级篇
- C++模板
- C语言内存对齐
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- 链表的回文结构
- 1008_第几天
- C++中的指针和动态分配二维数组问题
- 国外程序员整理的 C++ 资源大全
- sublime text 3 配置GCC G++编译C C++文件
- C++ Primer Plus (第六版)之旅 第二章
- C/C++ 记录时间
- 题目1448:Legal or Not
- 快速排序之c++实现
- 操作系统可变分区用C语言实现按首次适应算法分配内存
- iOSDay06C语言结构体
- 关于delete失败的问题
- C++细节总结
- C++ istringstream ostringstream stringstream 字符流操作函数
- C++ Primer Plus学习:第十五章