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

  • 相关阅读:
    破解 inode 校园网多网卡限制方法
    更改 eclipse的 workplace路径
    VMware Network Adapter VMnet1和VMnet8 未识别的网络的解决方法
    eclipse更改xml文件,txt文件,property文件等文件编辑器的字体设置
    Lua中数组全排序
    Lua尾调用
    C++ 调用Lua简单例子
    linux生成core dump
    vc获取系统日期
    C++培训第一天
  • 原文地址:https://www.cnblogs.com/melons/p/5791847.html
Copyright © 2011-2022 走看看