1、strstr()实现

  原型:char * strstr(const char * str1, const char * str2)

  说明:判断str2是否为str1的子串,如果是则返回str2第一次出现的位置,否则返回NULL

  实现:

 char * strstr(const char * str1, const char * str2)
{
if (NULL == str1 || NULL == str2)
return NULL; while (*str1++ != '\0')
{
for (int i = ; *(str1 + i) == *(str2 + i); ++i)
if (*(str2 + i + ) == '\0')
return (char*)str1;
}
return NULL;
}

  2、strcmp实现  

  原型:int strcmp(const char *s1,const char *s2);

  说明:比较字符串s1和s2的大小,如果s1>s2 ,返回大于0的整数,如果s1==s2 ,返回0,如果s1<s2,返回小于0的整数。

  实现:

 int strcmp(const char *s1, const char *s2)
{
while (*s1 && *s2 && (*s1 == *s2))
{
s1++;
s2++;
}
return ((unsigned char*)s1 - (unsigned char*)s2);
}

  3、strcpy实现

  原型:char* strcpy(char *dst, const char *src)

  说明:把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间

  实现:

 char * memcpy(char * dst, const char * src, unsigned len)
{
if (NULL == dst || NULL == src)
return NULL; char *rtn = dst; if (dst >= src && dst <= src + len - )//考虑到可能出现部分地址重叠
{
src += len - ;
dst += len - ;
while (len--)
*dst-- = *src--;
}
else
while (len--)
*dst++ = *src++; return rtn;
} unsigned strlen(const char *str)
{
if (NULL == str)
return -; unsigned len = ;
while (*str++ != '\0')
len++; return len;
} char* strcpy(char *dst, const char *src)
{
if (NULL == dst || NULL == src)
return NULL; char *rtn = dst;
memcpy(dst, src, strlen(src)+);
/*等同于
memcpy(dst, src, strlen(src));
dst[strlen(src)] = '\0';
*/
return rtn;
}

  PS: 既然是自己实现这两个函数,就不用C标准提供的函数了

码海拾遗:strstr()、strcmp()和strcpy()实现的更多相关文章

  1. 码海拾遗:strcpy()、strncpy()和strcpy_s()区别

    1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回ds ...

  2. 码海拾遗:基于MySQL Connector/C++的MySQL操作(连接池)

    1.MySQL安装及简单设置 (1)安装:在OSX系统下,可以使用万能的“brew install”命令来进行安装:brew isntall mysql(默认安装最新版的MySQL) (2)启动:br ...

  3. 码海拾遗:Linux常用命令(一)

    一.Linux系统安装 系统安装可以分两类:实体机安装Linux,虚拟机(常用虚拟机软件有两种:VMware和VirtualBox)安装Linux. 安装过程网上有很多教程,这里就不赘述了. 二.常用 ...

  4. 码海拾遗:简单Socket(TCP)类实现

    最近刚开始啃Unix网络编程(卷1:套接字联网API),为加深TCP连接的建立和终止的理解与记忆,记下本文,方便以后翻看. 同时留下的还有简单的Socket(TCP)类: mySocket.h #pr ...

  5. 码海拾遗:Linux多线程mutex锁

    多线程计数,每个线程累加10个数. 实现: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  6. 码海拾遗:简述C++(一)

    C++是Bjarne Stroustrup博士于1982年,在C语言的基础上引入并扩充了面向对象的概念后发明的一种新的程序语言.就与C语言的渊源而言,C++可以说是C语言的超集,它兼容C的一切(可能是 ...

  7. 内存及字符串操作篇strlen strchar strcmp strcoll strcpy strdup strstr strtok strspn strrchr bcmp bcopy bzero index memccpy memset

    bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件 #include<string.h> 定 ...

  8. c/c++面试题(3)strcat/strcmp/strlen/strcpy的实现

    1.编写一个函数实现strlen以及strcpy函数. strcpy函数. 后面的字符串拷贝到一个字符数组中,要求拷贝好的字符串在字符数组的首 地址,并且只拷贝到'\0'的位置.原型是 char* m ...

  9. C语言实现strcmp()和strcpy()函数

    #include <stdio.h> #include <assert.h> char *strcpy(char *strDest, const char *strScr) { ...

随机推荐

  1. 机器学习总结(参考源码ml.hpp)

    依据机器学习算法如何学习数据可分为3类: 有监督学习:从有标签的数据学习,得到模型参数,对测试数据正确分类: 无监督学习:没有标签,计算机自己寻找输入数据可能的模型: 强化学习(reinforceme ...

  2. 3)PHP基本语法和变量基础,区分大小写

    (1)语法环境: PHP嵌入到html到代码中: . <?php 这里是PHP代码 ?> 标准形式: <script language='php'> 这里是PHP代码 < ...

  3. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:输入数据处理框架

    import tensorflow as tf # 1. 创建文件列表,通过文件列表创建输入文件队列 files = tf.train.match_filenames_once("F:\\o ...

  4. 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建)

    黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) 黑马eesy_15 Vue:04.综合案例(前端 ...

  5. 通过if语句实现for循环的提前结束

    /************************************************************************* > File Name: mybreakin ...

  6. Java之多线程方式二(实现Runnable接口)

    /** * 创建多线程的方式二:实现Runnable接口 * 1. 创建一个实现了Runnable接口的类 * 2. 实现类去实现Runnable中的抽象方法:run() * 3. 创建实现类的对象 ...

  7. hashlib python 加密框架

    python3中digest()和hexdigest()区别 转自:https://www.cnblogs.com/yrxns/p/7727471.html hashlib是涉及安全散列和消息摘要,提 ...

  8. mui 左侧选项卡-div模式 的选项卡切换监听

    使用$('#segmentedControls').on('change', '.mui-control-item', function () { })和 document.getElementByI ...

  9. day30-client上传比较大的数据给server

    #在网络上面传输的数据叫数据包,数据包里面的数据叫报文,报文都有报头. #报头可以包含文件路径.文件大小.文件名称等等.#当数据比较长,一次性发送会报错,需要分多次发送.#client端上传数据到se ...

  10. 三角插值的 Fourier 系数推导

    给定 $k$ 个互不相同的复数 $x_0,\cdots,x_{k-1}$,以及 $k$ 个复数$y_0,\cdots,y_{k-1}$.我们知道存在唯一的复系数 $k-1$ 次多项式$$\mathca ...