库函数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 ...
随机推荐
- 12-7jquery选择器学习
p:odd 选择奇数个数的p标签 p:even选择奇数个数的p标签 p:gt(n)选择下标 大于n的p标签 p:lt(n)选择下标小于n的p标签 $(":root " ...
- animate 动画滞后执行的解决方案
jQuery动画: animate 容易出现连续触发.滞后反复执行的现象: 针对 jQuery 中 slideUp.slideDown.animate 等动画运用时出现的滞后反复执行等问题的解决方法有 ...
- ------ Tor(洋葱路由器)匿名网络源码分析——主程序入口点(一)------
--------------------------------------------------------<概览> tor 的源码包可以从官网下载,可能需要预先利用其它FQ软件才能访 ...
- ssh框架中struts.xml 的配置参数详解
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...
- Lucene就是这么简单
什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引 ...
- pdf文件中截取eps图片并压缩
最近遇到了一个问题,需要从pdf裁剪出其中部分的矢量图格式的图片,并保存为eps格式,方便使用. 最简单的方法就是先用acrobat pro将pdf进行页面抽取,并裁剪,剩下所需要的图片部分,然后另存 ...
- canvas画布,时钟
原理代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- pycharm+selenium搭建环境之no module named 'selenium'异常解决
在pycharm上搭建python+selenium自动化测试环境时,遇到一个很坑的问题:no moduel named 'selenium' 如下图: 解决方法: 1.查看你的python是否正确安 ...
- springMvc(一)
SpringMvc 1. 核心:DispatcherServlet 1.1作用:负责拦截请求并分派给相应的处理器处理 1.2配置DispatcherServlet(web.xml) 2.配置处理器映射 ...
- linux kexec内核引导
linux kexec 介绍 kexec的功能是用一个运行的内核去运行一个新内核,就像运行一个应用程序一样.这种机制因为跳过了bootloader,可以实现系统的快速重启.另外kdump也是基于kex ...