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. 1016D.Vasya And The Matrix#矩阵存在

    题目出处:http://codeforces.com/contest/1016/problem/D #include<iostream> #define ll long long int ...

  2. 基于JSP开发医院预约挂号系统 Java源码

    开发环境: Windows操作系统 开发工具: Eclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: 源码及原文链接:http://javadao.xyz/forum.php?mod= ...

  3. 虹软最新版 python 接口 完整版

    虹软最新版 python 接口 完整版 当前开源的人脸检测模型,识别很多,很多小伙伴也踩过不少坑.相信不少使用过dlib和facenet人脸识别的小伙伴都有这样的疑惑,为什么论文里高达99.8以上的准 ...

  4. Pandas Series 对象的loc与iloc区别

    import pandas as pd temp = pd.Series([,,,,]) loc用法: temp.loc[:] 0 1 1 2 2 3 3 4 # 输出索引为0-3的值(基于索引) t ...

  5. D. Welfare State

    There is a country with 

  6. 学习笔记#Android Studio 从安装到虚拟机启动

    1.JDK下载与环境变量配置 (JDK是什么?JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(J ...

  7. php通过身份证判断性别

    /** 已测试,百度很多写法不行的 * 1就是男性 2就是女性* 通过身份证获取性别类型* @param type $card* @return int*/function getCardSex($i ...

  8. git理论知识

    1.Git 有三种状态,你的文件可能处于其中之一:已提交(committed).已修改(modified)和已暂存(staged) 由此引入 Git 项目的三个工作区域的概念:Git 仓库.工作目录以 ...

  9. Leetcode13_罗马数字转整数

    题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1. ...

  10. Computing Essentials_第一章习题