C语言函数strstr()分析及实现
原型:char *strstr(const char *str1, const char *str2);
#include<string.h>
找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。
Returns a pointer to the first occurrence of strSearch in str, or NULL if strSearch does not appear in str. IfstrSearch points to a string of zero length, the function returns str.
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- #pragma warning (disable:4996)
- char *mystrstr(char *s1,char *s2);
- int main(void)
- {
- char *s="Golden Global View";
- char *l="ob"; //char *l=""
- char *p;
- system("cls");
- p=mystrstr(s,l);
- if (p!=NULL)
- {
- printf("%s\n",p);
- }
- else
- {
- printf("Not Found!\n");
- }
- getch();
- return 0;
- }
- /*FROM 百科*/
- char *mystrstr(char *s1,char *s2)
- {
- int n;
- if (*s2) //两种情况考虑
- {
- while(*s1)
- {
- for (n=0;*(s1+n)==*(s2+n);n++)
- {
- if (!*(s2+n+1)) //查找的下一个字符是否为'\0'
- {
- return (char*)s1;
- }
- }
- s1++;
- }
- return NULL;
- }
- else
- {
- return (char*)s1;
- }
- }
另一个实现:
- char * strstr (buf, sub)
- register char *buf;
- register char *sub;
- {
- register char *bp;
- register char *sp;
- if (!*sub)
- return buf;
- while (*buf)
- {
- bp = buf;
- sp = sub;
- do {
- if (!*sp)
- return buf;
- } while (*bp++ == *sp++);
- buf += 1;
- }
- return 0;
- }
又一个实现:
- #include <iostream>
- #include <string>
- using namespace std;
- //c语言实现strstr
- const char* isSub(const char* str, const char *subs){
- //特殊情况
- if(!*subs)
- return str;
- const char* tmp=str;
- while (*tmp!='\0')
- {
- //用于每次将父串向后移动一个字符
- const char* tmp1=tmp;
- //记录子串地址
- const char* sub1=subs;
- while (*sub1!='\0'&&*tmp1!='\0')
- {
- //若不相等则跳出,将父串后移一个字符
- if (*sub1!=*tmp1)
- break;
- //若相等且子串下一个字符是末尾则是这个父串的子串
- if (*sub1==*tmp1&&*(sub1+1)=='\0')
- return tmp;
- //若相等则继续比较下一个字符
- if (*sub1==*tmp1)
- {
- sub1++;
- tmp1++;
- }
- }
- tmp++;
- }
- return NULL;
- }
- int main(){
- char* str1="ababcdddb";
- char* str="";
- const char *res=isSub(str1,str);
- if (res!=NULL)
- {
- cout << res << endl;
- }
- else
- cout << "null" << endl;
- //cout << isSub(str1,str) << endl;
- return 0;
- }
C语言函数strstr()分析及实现的更多相关文章
- C语言函数strstr
函数原型: extern char *strstr(char *str1, const char *str2); 语法: * strstr(str1,str2) 参数: str1: 被查找目标 ...
- 最最简单的c语言函数汇编分析
0x01 环境 xp+vc6.0 0x02 代码 int plus(int x, int y) { return 0; } 以下是vc6.0的反汇编窗口 1: int plus(int x, int ...
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
- C语言函数库
C语言函数库 分类函数目录函数进程函数诊断函数接口子程序输入输出 str字符串操作函数mem操作存贮数组 数学函数 时间日期函数 转换函数 分类函数,所在函数库为ctype.h[top] int is ...
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- 03-第一个C语言程序的分析
本文目录 一.代码分析 二.开发和运行C程序的步骤 三.总结 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语 ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 动态修改 C 语言函数的实现
Objective-C 作为基于 Runtime 的语言,它有非常强大的动态特性,可以在运行期间自省.进行方法调剂.为类增加属性.修改消息转发链路,在代码运行期间通过 Runtime 几乎可以修改 O ...
- 利用R语言打造量化分析平台
利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...
随机推荐
- Android Studio: You need to use a Theme.AppCompat theme (or descendant) with this activity.
错误描述为: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with ...
- 用Netty解析Redis网络协议
用Netty解析Redis网络协议 根据Redis官方文档的介绍,学习了一下Redis网络通信协议.然后偶然在GitHub上发现了个用Netty实现的Redis服务器,很有趣,于是就动手实现了一下! ...
- dubbo安装
dubbo 管控台可以对注册到 zookeeper 注册中心的服务或服务消费者进行管理,分享牛系列,分享牛专栏,分享牛.但管控台是否正常对 Dubbo 服务没有影响,管控台也不需要高可用,因此可以单节 ...
- 将meteor部署到自己的服务器(deploy meteor to your own server)
安装指定版本的node # 所有版本在:https://nodejs.org/download/release/# current dir:/rootwget -c https://nodejs.or ...
- cassandra eclipse 环境构建
摘要 本文主要介绍如何在eclipse中搭建cassandra环境 更多cassandra,nosql 相关知识请访问http://www.webpersonaldeveloper.cn 正文 1.f ...
- JAVA面向对象-----super关键字
JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 【Netty源码学习】BootStrap
BootStrap是客户端的启动类,其主要功能就是设置必要的参数然后启动客户端. 实现如下: Bootstrap b = new Bootstrap(); b.group(group) .channe ...
- Python模块探秘 Smtplib发送带有各种附件的邮件
这两天对Python的邮件模块比较感兴趣,于是就查了查资料.同时在实际的编码过程中也遇到了各种各样的问题.下面我就来分享一下我与smtplib的故事. 前提条件 我的上一篇博文里面讲解了,发送邮件必须 ...
- 安卓仿QQ红包领取详情界面动画
为了能清楚的看到这个效果,本人不惜几次花费重金给众群叼发放红包,来查看红包领取详情界面的动画效果,QQ效果如图: 图中我们可以看到,动画处的头像和文字是一起的,即同时并且是整体,注意,是整体进行缩放的 ...