文章目录

前言一、strstr 函数二、子串查找业务场景三、代码示例

前言

​字符串开发模型 :​

  • ​strstr-while/do…while 模型 :​ 在 字符串 中 查找 子串特征 ;
  • ​两头堵模型 :​ 两个指针变量 , 一个指向首部 , 一个指向尾部 , 进行 翻转 , 逆序 等操作 ;
  • ​字符串翻转模型 :​ 借助 指针 进行翻转 , 或 借助 栈 后进先出的特性 , 进行 翻转 ;

一、strstr 函数


strstr​ 函数的作用是在 char *str1​ 字符串中查找 char *str2 字符串 ;

​函数原型 :​

#include <stdio.h>
#include <string.h>
extern char *strstr(char *str1, const char *str2);
  • char *str1​ 参数是 大字符串 ;
  • const char *str2​ 参数是 小字符串 ;
  • ​返回值 :​ 如果 char *str1​ 中包含 const char *str2​ 子串 , 则返回该子串第一次出现的指针地址 , 如果没有 , 则返回 NULL ;

二、子串查找业务场景


​业务场景 :​ 给定字符串 , 然后在下面的字符串中查找 “abc” 字符串的出现次数 ;

// 存在如下字符串, 求下面字符串 "abc" 出现次数
char *p = "sdfsdfsdabc4548411abc";

令指针指向 字符串 首地址 , 查找后面的 字符串 中是否是 “abc” ;

三、代码示例


​代码示例 :​

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main()
{
// 存在如下字符串, 求下面字符串 "abc" 出现次数
char *str = "sdfsdfsdabc4548411abc";
// 记录下 "abc" 子串出现次数
int count = 0;
// 使用 p 指针进行遍历
char *p = str;

do
{
// 查找 p 指针指向的字符串中, 是否包含 "abc" 子串
// 如果包含 , 返回子串第一次出现的指针地址
// 如果不包含 , 返回 NULL
p = strstr(p, "abc");

// 包含的情况
if(p != NULL)
{
// 子串出现次数 + 1
count++;
// 跳过当前的 "abc" 子串 , 从后面开始遍历
p = p + strlen("abc");
}
else
{
// 如果没有找到 "abc" 子串 , 则退出循环换
break;
}

}while(*p != '\0');

// 打印子串出现次数
printf("count = %d\n", count);


// 命令行不要退出
system("pause");
return 0;
}

​执行结果 :​

【C 语言】字符串模型 ( strstr-do…while 模型 )_strstr