strstr的使用和模拟实现

strstr的使用

  1. char * strstr (const char * str1,const char * str2);
  2. 返回str2在str1中第一次出现的位置,没有出现的话返回空指针。
  3. 字符串比较匹配不包含\0字符,以\0作为结束标志

strstr模拟实现

  1. 我们需要一个指针变量,记录起始位置和结束位置,否则无法知道从哪开始匹配成功的
  2. 还需要两个指针变量,记录起始位置。因为在匹配的过程中位置会发生变化
  3. 指针cur存放的是当前匹配的起始位置,判断起始位置是否为/0后进入while循环,进入while循环后,将其起始位置赋给s1,将字符串2赋给s2去匹配,如果s1=s2就++,继续匹配下一个地址的内容,如果匹配不成功,则跳出while循环。跳出while循环后,cur++使得起始位置+1,继续重新匹配
  4. 但是同时s1和s2不能等于='\0',因为如果是最后匹配成功了,但是因为没有前面的条件无法跳出循环。所以设置该条件是为了使得s1和s2还有继续匹配的寄回
  5. 如果匹配到s2='\0',那就说明找到了,返回cur起始位置
  6. 如果匹配到起始位置cur都为0了,也就是跳出循环了,那说明匹配完了,找不到了
  7. 特殊场景:如果str2为空,则直接返回str1
  8. 最后返回类型需要强制类型转换为(char * ),因为该类型是const char *,需要将其转换为const char *

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
char* my_strstr(char* str1, char* str2)
{
	const char * s1 = NULL;
	const char * s2 = NULL;
	const char * cur = str1;
	while (*cur)
	{
		s1 = cur;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char *)cur;
		}
		cur++;
	}
	return NULL;
}

int main()
{
	char arr1[] = "abcqqqcp";
	char arr2[] = "qqc";
	char *ret = my_strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("没有找到");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

相关推荐

  1. strstr 使用模拟实现

    2024-07-10 14:26:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 14:26:02       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 14:26:02       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 14:26:02       90 阅读
  4. Python语言-面向对象

    2024-07-10 14:26:02       98 阅读

热门阅读

  1. Transformer模型论文解读、源码分析和项目实践

    2024-07-10 14:26:02       24 阅读
  2. python:使用openpyxl模块处理excel

    2024-07-10 14:26:02       23 阅读
  3. pg数据库时间比较

    2024-07-10 14:26:02       26 阅读
  4. C# 枚举的定义及使用

    2024-07-10 14:26:02       29 阅读
  5. Prompt Engineering 探险

    2024-07-10 14:26:02       26 阅读
  6. 机器学习之神经网络

    2024-07-10 14:26:02       33 阅读
  7. Lianwei 安全周报|2024.07.09

    2024-07-10 14:26:02       22 阅读
  8. 每天一个数据分析题(四百一十八)- 相关分析

    2024-07-10 14:26:02       24 阅读
  9. 计算机网络面试常见题目(一)

    2024-07-10 14:26:02       29 阅读
  10. vue配置sql规则

    2024-07-10 14:26:02       21 阅读