1.strlen()函数是求解字符串的有效长度的

1)非递归实现

size_t my_strlen(const char *str)

{

assert(str != NULL);  //断言,保证指针参数不能为空

size_t count = 0;

const char *pstr = str;   //参数保护

while (*pstr++ != '\0')

{

count++;

}

return count;

}

2)非递归实现

size_t my_strlen(const char *str)

{

assert(str != NULL);  //断言,保证指针参数不能为空

const char *pstr = str;   //参数保护

if (*str == NULL)

return 0;

else

return my_strlen(str + 1) + 1;

}

2.strcat()字符串连接函数

char* my_strcat(char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

char *pstr1 = str1;

const char* pstr2 = str2;

while(*pstr1 != '\0')

{

pstr1++;

}

while (*pstr2!= '\0')

{

*pstr1++ = *pstr2++;

}

*pstr1 = '\0';

return str1;

}

3.strcpy()字符串拷贝函数

char* my_strcpy(char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

char *pstr1 = str1;

const char* pstr2 = str2;

while (*pstr2!= '\0')

{

*pstr1++ = *pstr2++;

}

*pstr1 = '\0';

return str1;

}

4.strcmp()字符串比较函数

int my_strcmp(const char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

const char *pstr1 = str1;

const char* pstr2 = str2;

while (*pstr2!= '\0'&&*pstr2!='\0')

{

if (*pstr1 > *pstr2)

return 1;

else if (*pstr1 < *pstr2)

return -1;

pstr1++;

pstr2++;

}

while (*pstr1 != '\0'&&*pstr2 == '\0')

return 1;

while (*pstr1 == '\0'&&*pstr2 != '\0')

return -1;

return 0;

}

以上函数虽然可以实现字符串的拷贝函数,但是能不能做的更好呢?下面给出另一种实现方法:

int my_strcmp(const char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

const char *pstr1 = str1;

const char* pstr2 = str2;

int result = 0;

while (*pstr2!= '\0'||*pstr2!='\0')

{

result = *pstr1 - *pstr2;

if (result != 0)

break;

pstr1++;

pstr2++;

}

if (result>0)

return 1;

else if (result<0)

return -1;

return result;

}

自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()的更多相关文章

  1. strlen strcat strcpy strcmp 自己实现

    strlen strcat strcpy strcmp 自己实现 strlen include <stdio.h> #include <string.h> #include & ...

  2. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  3. C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...

  4. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  5. LoadRunner中常用的字符串操作函数

    LoadRunner中常用的字符串操作函数有:                strcpy(destination_string, source_string);               strc ...

  6. [转载]c++常用字符串操作函数

    原文地址:c++常用字符串操作函数作者:Valsun 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source ...

  7. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

  8. linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words

    1.1       字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...

  9. mysql常用字符串操作函数大全,以及实例

    今天在论坛中看到一个关于mysql的问题,问题如下 good_id     cat_id12654         665,56912655         601,4722 goods_id是商品i ...

随机推荐

  1. 机器学习(一):梯度下降、神经网络、BP神经网络

    这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络.梯度下降算法,然后顺便又延伸温习了一下线性代数.概率论以及求导.总的来说,学到不少知 ...

  2. java 继承类与接口问题

    java 先extends 继承类,再implements 继承接口 public class DataBase extends ClassBase implements Ijiekou { }// ...

  3. Xcode 创建静态库和动态库

    1.linux中静态库和动态库区别: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库:这类库的名字一般是libxxx.a:利用静态函数库编译成的文件 ...

  4. IDA 与VC 加载符号表

    将Windbg路径下的symsrv.yes 拷贝到ida 的安装目录,重新分析ntoskrnl.exe, 加载本地的符号表 添加环境变量  变量名:_NT_SYMBOL_PATH变量值:SRV*{$P ...

  5. 使用secureCRT远程Linux,出现远程主机拒绝连接

    1.查看是否开启远程连接, 控制面板->程序和功能->打开或关闭windows功能->勾选telnet服务器和telnet客户端2.cmd命令行输入telnet ip地址 端口号(比 ...

  6. 如何修改Linux系统的TTL值

    在网络中,黑客如果用ping命令去探测  一个主机,根据TTL基数可以推测操作系统的类型.对于一个没有经过任何网关和路由的网络, 直接ping对方系统得到的TTL值,被叫做"TTL基数&qu ...

  7. lintcode:寻找旋转排序数组中的最小值 II

    寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在重复的元 ...

  8. C语言运算符优先级表

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -& ...

  9. Java-马士兵设计模式学习笔记-代理模式-动态代理 修改成可以任意修改代理逻辑

    一.概述 1.目标:动态代理的代理逻辑可以任意修改 2.思路: (1)要把代理逻辑抽离,站在jvm的角度思考,应独立出InvocationHandler接口,并接收被代理的对象及方法作为参数invok ...

  10. mfc Clistctr 单元格嵌入图片(bmp)

    示例:http://download.csdn.net/detail/zahxz/4652543 代码: CListCtrl mCtrlist;//列表控件 CImageList m_ImageLis ...