库函数strstr的实现
没什么说的,常规思路:
函数原型:const char* StrStr(const char *str1, const char *str2)
方法一:
str1:源字符串;
str2:需要查找的目的字符串;
#pragma once
#include<assert.h> const char* My_strstr(const char* str1, const char* str2)
{
assert(nullptr != str1 && nullptr != str2); //断言 //如果目的字符串不是只有\0,走起
if ('\0' != *str2)
{
while ('\0' != *str1)
{
for (int i = 0; *(str1 + i) == *(str2 + i); ++i)
{
if ('\0' == *(str2 + i + 1)) //这里没用后置加加,而是*(str2+i+1)中只是加了一个1
//目的是想知道str2 + i的下一个字符是不是\0
{
return str1;
}
}
++str1;
}
return nullptr;
} //目的字符串是空的
else
{
return str1;
}
} void Test()
{
char a[] = "abcdefgh";
char b[] = "cde";
const char* result = My_strstr(a,b);
}
方法二:
源字符串:str1
目的字符串:str2
const char* My_strstr(const char* str1, const char* str2)
{
assert(nullptr != str1 && nullptr != str2); //断言 for (int i = 0; str1[i] != '\0'; ++i)
{
int temp = i; //记录源字符串的每次的其实位置,有后边改变;
int j = 0;
while (str1[i++] == str2[j++])
{
if (str2[j] == '\0') //这里的j很巧,由于while()中的条件结束,
//j就j++了,所以j是指向下一个的
{
return &str1[temp];
}
}
i = temp; //while 出来,不相等,str1回到相同的几个之前
}
return nullptr;
}
赐教!
库函数strstr的实现的更多相关文章
- 【c语言】模拟库函数strstr
// 模拟库函数strstr #include <stdio.h> #include <assert.h> const char* my_strstr(const char * ...
- C语言中库函数strstr的实现
在C语言中库函数strstr()函数表示在一个字符串str1中查找另一个字符串str2,如果查到则返回str2在str1中首次出现的位置,如果找不到则返回null. char* strstr(char ...
- C语言库函数strstr、strch比较
该库函数包含在<string.h>头文件中,函数原型:extern char *strstr(char *str1, const char *str2);使用方法 char *strstr ...
- c语言,string库函数strstr实现
说明: 原型:char *strstr(char *haystack, char *needle); 用法:#include <string.h> 功能:从字符串haystack中寻找ne ...
- C库函数strstr分析
C标准库<string.h> 函数声明: char* strstr(char* const _String, char const* const _SubString) 返回值: SubS ...
- C 库函数 - strstr()
定义 char *strstr(const char *haystack, const char *needle) 参数 haystack -- 要被检索的 C 字符串. needle -- 在 ha ...
- LeetCode: Implement strStr() [027]
[题目] Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if ...
- C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()
//自定义一个字符串字串查找标准库函数strstr() #include<stdio.h> #include<string.h> char* myStrstr(char *st ...
- 从头到尾彻底理解KMP
从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进. 1. 引言 本KMP原文最初写于2年多前的201 ...
随机推荐
- AC自动机模板2(【CJOJ1435】)
题面 Description 对,这就是裸的AC自动机. 要求:在规定时间内统计出模版字符串在文本中出现的次数. Input 第一行:模版字符串的个数N. 第2->N+1行:N个字符串.(每个模 ...
- Django Middleware简介
1 前言 Django使用非常熟练了,各种API接口不在话下,全都搞定.为方便定位问题在每个API接口的的开始和返回的地方都加上了log打印,记录入参和返回值. 但是这样有一个问题,需要每个 ...
- eclipse 精确查询
---恢复内容开始--- ctrl+H(一般都是这个,如果无效看你的自定义快捷键) 输入\b 查询的字符串 \b 后面的正则表达式选框必须选
- Learn HTML5 in 5 Minutes!
There's no question, HTML5 is a hot topic for developers. If you need a crash course to quickly unde ...
- PAT乙级-1042. 字符统计(20)
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...
- templet模式
package template;import java.sql.Connection;import java.sql.ResultSet;/** * Created by marcopan on 1 ...
- celery学习之入门
Celery 简介 Celery 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具.它是一个专注于实时处理的任务队列,同时也支持任务调度. broker:一个消息 ...
- jQuery中的ajax的相关方法
JQuery对Ajax操作进行了封装,$.ajax()方法属于最底层的方法,第2层是load().$.get().$.post()方法,第3层是$.getScript()和$.getJSON()方法. ...
- Windows Server 2019 预览版介绍
在Windows server 2012.Windows server 2016还未完全普及的情况下,昨天Windows Server团队宣布Windows Server 2019将在2018年的下半 ...
- 从JavaScript的事件循环到Promise
JS线程是单线程运行机制,就是自己按顺序做自己的事,浏览器线程用于交互和控制,JS可以操作DOM元素, 说起JS中的异步时,我们需要注意的是,JS中其实有两种异步,一种是基于浏览器的异步IO,比如Aj ...