strcpy/strlen/strcat/strcmp的实现
2018-01-15 16:18
309 查看
刷到一道题:写出完整版的strcpy函数
索性对相关函数进行一下整理:
参考博客:https://songlee24.github.io/2015/03/15/string-operating-function/
一、字符串拷贝函数strcpy
函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
要点:
1. strcpy在执行字符串的复制或追加过程中,不执行溢出检查
2. strcpy会拷贝’\0’,且在拷贝的过程中根据’\0’判断是否停止拷贝
3. 注意编程风格,变量的命名要规范
4. 源指针所指的字符串不能修改,应该声明为const
5. 要判断一下源指针与目的指针为空的情况,思维要严谨,这里使用assert
6. 需要使用临时变量保存目的字符串的地址,并返回该地址
7. 函数返回char *的目的是为了支持链式表达式,即strcpy可以作为其他函数的实参。
二、字符串长度strlen
三、字符串拼接strcat
函数strcat的原型是char* strcat(char* des, char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
四、字符串比较strcmp
函数strcmp的原型是int strcmp(const char *s1,const char *s2)。
若s1==s2,返回零;
若s1>s2,返回正数;
若s1<s2,返回负数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇\0为止。
索性对相关函数进行一下整理:
参考博客:https://songlee24.github.io/2015/03/15/string-operating-function/
一、字符串拷贝函数strcpy
函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
#include<cassert> //assert的定义 #include<cstddef> //NULL的定义 char * strcpy(char * strDst, const char * strSrc) { assert((strDst != NULL) && (strSrc != NULL)); char * address = strDst; while ((*strDst++ = *strSrc++) != 0); return address; }
要点:
1. strcpy在执行字符串的复制或追加过程中,不执行溢出检查
2. strcpy会拷贝’\0’,且在拷贝的过程中根据’\0’判断是否停止拷贝
3. 注意编程风格,变量的命名要规范
4. 源指针所指的字符串不能修改,应该声明为const
5. 要判断一下源指针与目的指针为空的情况,思维要严谨,这里使用assert
6. 需要使用临时变量保存目的字符串的地址,并返回该地址
7. 函数返回char *的目的是为了支持链式表达式,即strcpy可以作为其他函数的实参。
二、字符串长度strlen
#include<cassert> #include<cstddef> size_t strlen(char * str) { assert(str != NULL); size_t len = 0; while ((*str++) != '\0')len++; return len; }
三、字符串拼接strcat
函数strcat的原型是char* strcat(char* des, char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。
#include<cassert> #include<cstddef> char * strcat(char * strDst, const char * strSrc) { assert((strDst != NULL) && (strSrc != NULL)); char *address = strDst; while (*strDst != '\0')strDst++; while ((*strDst++ = *strSrc++) != '\0'); return address; }
四、字符串比较strcmp
函数strcmp的原型是int strcmp(const char *s1,const char *s2)。
若s1==s2,返回零;
若s1>s2,返回正数;
若s1<s2,返回负数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇\0为止。
#include<cassert> #include<cstddef> int strcmp(const char * str1, const char * str2) { assert((str1 != NULL) && (str2 != NULL)); while (*str1 == *str2) { if (*str1 == '\0') return 0; ++str1; ++str2; } return *str1 - *str2; }
相关文章推荐
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- C语言中strlen、strcpy、strncpy、strcat、strnact、strcmp、memcpy函数的实现
- strlen(),strcpy(),strncpy(),strcat(),strncat(),strcmp(),strncmp()等函数的实现
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 编C语言程序:用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和strlwr的功能
- strlen,strcat,strcpy,strncpy,strcmp的具体实现
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- C语言字符串常见操作-strcpy、strlen、strcat和strcmp实现
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- 读书笔记:自定义函数实现字符串处理函数----strlen、strcmp、strcat、strcpy
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- strcat,strcpy,strcmp,strlen4个常用字符串处理函数的数组与指针简单实现方法~
- strcpy, strcmp, strcat, strstr, strlen的实现
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 面试基础_03实现strcpy、strcat、strcmp、strlen
- strcat strcpy strcmp strlen 的j简单实现
- strcat、strcpy、strcmp、strlen简单实现