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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言字符串模型 ( strstr-do…while 模型 )相关的知识,希望对你有一定的参考价值。

前言

字符串开发模型 :

  • 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 模型 )的主要内容,如果未能解决你的问题,请参考以下文章

C 语言字符串模型 ( 字符串翻转模型 )

C 语言字符串模型 ( 两头堵模型 )

C 语言字符串模型 ( 键值对模型 )

C语言 字符串操作两头堵模型

C 语言字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )

C 语言字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 形参返回值 | 函数返回值 | 函数形参处理 | 形参指针判空 )