C/C++库函数strstr和find实现子字符串查找

2023-10-27

1 子字符串查找实现Demo

#include<iostream>
#include<string>
#include<cstring>
using namespace std;

int main()
{
    char a[] = "abcddabc";
    char b[] = "dda";
    int j;
    string str1(a);
    string str2(b);
    //方法一
    int i = str1.find(str2);  //返回即子字符串索引3
    //方法二
    char *rel = strstr(a, b); //首次出现地址,strstr保存的是ddabc
    if (rel != NULL)
        j = rel -a;         //根据返回子字符串匹配结果输出索引位

    return 0;
}

2 子字符串查找之字符串数组strstr

  上面实现子字符串查找主要利用两个库函数方法,第一个是字符串数组(char*)实现,string.h或者cstring头文件中strstr函数。第一个参数是主字符串,第二个参数是子字符串,如果存在返回首次出现的地址,所以需要利用一个字符串指针获取结果(切记:返回非直接索引位!);否则,返回NULL。
  我们看看出现地址怎么转换到索引位,如下:

    if (rel != NULL)
        j = rel -a;         

  我们知道char类型地址分配为1个字节,rel指向的是查找到子串在主字符串中的地址(例如:0x23544203),而a是主字符串的首地址(例如:0x23544200),两者差值正好就是索引位。

3 子字符串查找之字符串string的find方法

  string头文件中find函数就是在主字符串中查找子字符串的索引。

int i = str1.find(str2);  //返回即子字符串索引3

4 其它说明

  子字符串查找如果手写,有暴力方法,KMP算法等等,想详细了解请查阅以下链接:

http://blog.csdn.net/fx677588/article/details/53406327

  至于string头文件与cstring头文件的区别,请查看下文链接:

http://blog.csdn.net/fx677588/article/details/53102634
http://blog.csdn.net/fx677588/article/details/53033653


  个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

  转载请注明出处:http://blog.csdn.net/FX677588/article/details/70734291

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++库函数strstr和find实现子字符串查找 的相关文章

随机推荐

  • 第三周 任务2.1 C#猜数字

    程序头部注释开始 程序的版权和版本声明部分 Copyright c 2011 烟台大学计算机学院学生 All rights reserved 文件名称 C 猜数字 作 者 薛广晨 完成日期 2011 年 09 月 11 日 版 本号 x1
  • 一文理解GPT及向ChatGPT提问的技巧

    一 什么是ChatGPT 人工智能已成为当今科技领域的一大热门话题 随着深度学习的快速发展 OpenAI团队在其GPT Generative Pre trained Transformer 模型的基础上 推出了ChatGPT 这是一种革命性
  • 红芯丑闻揭秘者 Touko 专访

    专栏 九章算法 网址 www jiuzhang com 红芯事件 近日 一则 自主研发的国产浏览器内核 红芯宣布获2 5亿C轮融资 的讯息再次将 国产自主创新 这一话题推向高潮 希冀之声群起 然好景不长 网友Touko在将红芯浏览器的exe
  • 专业修图软件 Affinity Photo mac中文功能

    Affinity Photo for mac是应用在MacOS上的专业修图软件 支持多种文件格式 包括psD PDF SVG Eps TIFF JPEG等 Affinity Photo提供了许多高级图像编辑功能 如无限制的图层 非破坏性操作
  • (六)IDEA新建工程——从0开始大数据开发实战:电影推荐系统(scala版)

    打开IntelliJ IDEA 选择菜单 File gt New gt Project 打开一个新建项目对话框 如下图所示 本教程使用Maven对Scala程序进行编译打包 所以 请点击左侧的 Maven 右侧 Create from ar
  • 英特尔cpu发布时间表_英特尔CPU路线曝光,碾压AMD和Arm就在4年后?

    来源 内容由半导体行业观察 ID icbank 编译自 Adoredtv 谢谢 我们最近不仅收到了英特尔的内部客户端CPU路线图 我们还收到了内部服务器路线图 一直延伸到2024年的roadmap 在我开始分享这个路线图的细节之前 我必须澄
  • Qt Designer UI设计布局小结

    目录 前言 1 居中布局 2 左右布局 3 上下布局 4 复杂页面布局 总结 前言 本文总结了在开发Qt应用程序时使用 Designer 进行UI布局的一些心得体会 Qt Designer是Qt提供的一个可视化界面设计工具 旨在帮助开发人员
  • Matlab 改变图像尺寸

    问题 我们在进行图像相关的实验时 需要对读取后的图片进行处理 改变图片尺寸就是其中一种处理 方法 1 imresize 利用插值方法重塑图像大小 P imread picture jpg 读取处理的图像 new P imresize P m
  • 1.1.1 Qt信号槽之connect与disconnect介绍

    关于Qt信号槽中connect与disconnect介绍 首先我们要知道 如果想要使用Qt中的信号槽机制 那么必须继承QObject类 因为QObject类中包含了信号槽的一系列操作 今天我们来讲解的是信号与槽怎么建立连接以及断开连接 一
  • Python爬虫之findall和lxml

    Python爬虫之findall和lxml 提示 前言 Python爬虫之findall和lxml 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 Python爬虫之findall和lxml 前言 一 导入包 二
  • vivo 自研鲁班分布式 ID 服务实践

    作者 vivo IT 平台团队 An Peng 本文介绍了什么是分布式ID 分布式ID的业务场景以及9种分布式ID的实现方式 同时基于vivo内部IT的业务场景 介绍了自研鲁班分布式ID服务的实践 一 方案背景 1 1 分布式ID应用的场景
  • 任务调度框架 Quartz 用法指南(超详细)

    点击关注 Java基基 2022 07 31 11 55 发表于上海 点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝
  • C语言打印菱形

    思路 简单明了的说一下 首先我们可以将菱形分成上半部分和下半部分 用3个for循环打印上半部分 再用3个for循环打印下半部分 至于for循环里面的判断条件为什么要这样写 你记住就行了 不要问为什么 你问的话 它逻辑就是通的 define
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记1——课程简介篇

    北京大学肖臻老师 区块链技术与应用 公开课笔记 课程简介篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page 区块链的本质是什么 观点1 区块链是下一代价值
  • VMware Workstation及CentOS-7虚机安装

    创建新的虚机 选择安装软件 这里选的是桌面版 也可以根据实际情况进行选择 等待检查软件依赖关系 选择安装位置 自主配置分区 创建一个普通用户 安装完成后重启 点击完成配置 进入登陆界面 输入账号密码进入系统
  • STM32 复合设备编写

    目的 完成一个CDC MSC的复合USB设备 可以方便在CDC MSC 复合设备三者间切换 可移植性强 预备知识 cube中USB只有两个入口 main函数中的MX USB DEVICE Init函数 init function void
  • (十七)STM32——定时器

    目录 学习目标 内容 简介 定时器分类 定时器功能介绍 计时器模式 工作过程 内部时钟选择 寄存器 配置 代码 总结 学习目标 本节内容我们来介绍一下有关定时器的知识 其实这个定时器 和我们日常接触的定时器没有什么区别 都是到了一定的时间就
  • ajax简单异步图片上传,Ajax简单异步上传图片并回显

    前台代码 上传图片按钮 选择图片 隐藏的文件选择器 图片预览 去除图片预览未选择时默认时的边框 img src img not src opacity 0 JavaScript部分 function uploadPhoto photoFil
  • Qt--拖放操作

    Qt 拖放操作 1 使用拖放打开文件 将桌面上的 txt文件拖入程序打开 新建Widget项目 项目名称为mydragdrop 类名和积累保持MainWindow和QMainWindow不变 建立完项目后 往界面上拖入一个Text Edit
  • C/C++库函数strstr和find实现子字符串查找

    1 子字符串查找实现Demo include