zoukankan      html  css  js  c++  java
  • 库函数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); //断言
    
    	//如果目的字符串不是只有,走起
    	if ('' != *str2)
    	{
    		while ('' != *str1)
    		{
    			for (int i = 0; *(str1 + i) == *(str2 + i); ++i)
    			{
    				if ('' == *(str2 + i + 1))  //这里没用后置加加,而是*(str2+i+1)中只是加了一个1
    							//目的是想知道str2 + i的下一个字符是不是
    				{
    					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] != ''; ++i)
    	{
    		int temp = i;    //记录源字符串的每次的其实位置,有后边改变;
    		int j = 0;
    		while (str1[i++] == str2[j++])
    		{
    			if (str2[j] == '') //这里的j很巧,由于while()中的条件结束,
    				                //j就j++了,所以j是指向下一个的
    			{
    				return &str1[temp];
    			}
    		}
    		i = temp; //while 出来,不相等,str1回到相同的几个之前
    	}
    	return nullptr;
    }
    赐教!

  • 相关阅读:
    计数
    表单验证
    获取位置
    jq事件
    jq选择器
    PHP超文本预处理器(通用开源脚本语言)
    文字超出两行显示省略号
    Vim配置:在win10下用vim编译运行C/C++(异步插件管理,一键运行)
    实验楼HTML基础入门学习
    博客园美化:添加目录,标题设置,代码高亮,主题设置
  • 原文地址:https://www.cnblogs.com/melons/p/5791847.html
Copyright © 2011-2022 走看看