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. 解决 nginx 启动错误 nginx: [emerg] host not found in upstream

    解决办法来自于:https://blog.csdn.net/Hreticent/article/details/86074502 感谢这个朋友简单而清晰的解决办法. 在配置nginx支持PHP的时候, ...

  2. SQL注入常用函数(注入小白的学习笔记)

    在盲注的情况下,往往需要一个一个字符的去猜解,即过程中需要截取字符串 在这里整理了一下一些常用函数 由于现阶段学习不够深入,整理分类不清楚具体,不过博主会慢慢进行完善 user() 查询当前数据库用户 ...

  3. 解决在Anaconda中的cv2在pycharm中不可使用的问题

    在Anaconda中已经安装好的opencv模块在pycharm中却不能正常使用,后来发现是pycharm使用的python环境中没有opencv的包,解决方法有两种: 方法一 在pycharm的设置 ...

  4. redis安装以及主从复制完整版

    redis安装以及主从复制完整版redis版本:redis-3.2.11主从复制模式:master--> slave1--> slave2 master:10.10.11.32 slave ...

  5. 14 微服务电商【黑马乐优商城】:day04-项目搭建(二)

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  6. TPO2-1Desert Formation

    The extreme seriousness of desertification results from the vast areas of land and the tremendous nu ...

  7. springboot集成aop日志

    日常开发中假如是前后端完全分离,我们会习惯用浏览器去调用controller的接口来测试.这一个过程普通的日志功能会记录sql参数等一些基本信息.但是假如项目越来越庞大,我们的包越来越多,在维护项目和 ...

  8. 领导力 / LeaderShip

    领导力 / LeaderShip 什么是领导力? 结合我自己的经验,谈谈理解. 我们人类社会,发展到现在,已经成为了一个集合体,这一点在工业革命之前,表现的极为明显. 常见的社会发展形态,会按照人与人 ...

  9. [LC] 1048. Longest String Chain

    Given a list of words, each word consists of English lowercase letters. Let's say word1 is a predece ...

  10. HDU 6126 Give out candies(网络流)

    题目给出n,m,k 然后给出n*m的矩阵a[i][j]代表第i个人在获得j 颗糖果能得到的满足值, 然后k是k行每行输入三个整数x,y,z     ,x,y,z表示一组限制表示第x个人分到的糖数减去第 ...