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;
    }
    赐教!

  • 相关阅读:
    你应该了解Nginx的7个原因
    linux 中php以及nginx的重启命令
    HTTP 长连接和短连接
    git常用命令
    Linux 防火墙开放特定端口 (iptables)
    redis配置文件相关
    关于解决emoji表情的存储
    文件内容统计——Linux wc命令
    Git 服务器搭建
    关于微信二次分享,描述变链接的解决方法(一)----文档说明
  • 原文地址:https://www.cnblogs.com/melons/p/5791847.html
Copyright © 2011-2022 走看看