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. Matlab高级教程_第二篇:Matlab相见恨晚的模块_01_定时器

    MATLAB的定时器功能(timer函数): 1 从MATLAB6.5版本开始,MATLAB开始支持定时器.相对于传统的pause函数来说,定时器要强大的多,不仅可以等效实现pause的功能,还可以显 ...

  2. RDD(五)——action

    reduce(func) 通过func函数聚集RDD中的所有元素并得到最终的结果,先聚合分区内数据,再聚合分区间数据.Func函数决定了聚合的方式. def main(args: Array[Stri ...

  3. 关于volatile关键字

    来源:衡阳网站优化 在java核心卷1中对volatile关键字是这么描述的: volatile关键字为实例域的同步访问提供了一种免锁机制.如果声明一个域为volatile,那么编译器和虚拟机就知道该 ...

  4. [USACO09DEC]雪橇Bobsledding(贪心)

    https://www.luogu.org/problem/P2968 题目描述 Bessie has entered a bobsled competition because she hopes ...

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

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

  6. 记忆化dp博弈

    题:http://poj.org/problem?id=2068 题意: 有两个队伍A,B,每个队伍有N个人,交叉坐.即是A(1,3,5,7.....)B(2,4,6,8....).告诉你每个mi(1 ...

  7. Normal Probability Plots|outlier

    6.4 Assessing Normality; Normal Probability Plots The normal probability plot is a graphical techniq ...

  8. python3下scrapy爬虫(第十四卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之执行)

    现在我们现在一个分机上引入一个SCRAPY的爬虫项目,要求数据存储在MONGODB中 现在我们需要在SETTING.PY设置我们的爬虫文件 再添加PIPELINE 注释掉的原因是爬虫执行完后,和本地存 ...

  9. Django学习之模板层

    三板斧 render,HttpResponse,redirectrender返回一个HTML页面,并且还能够给该页面传数据render内部原理: from django.template import ...

  10. 96)PHP,文件上传(2)

    (1)那么既然看到文件即使上传成功,但是只是在脚本周期内有效,脚本只要结束(脚本结束其实很快的),文件就会自动消失,那么怎么才能永久存储文件呢: 函数: Move_uploaded_file(上传临时 ...