c/c++:字符串str中寻找子串substr出现的次数

news2024/11/18 6:17:51

c/c++:字符串str中寻找子串substr出现的次数

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
【15】c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
【16】c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数
【17】c/c++:函数的作用,分类,随机数,函数定义,调用,申明,exit()函数,多文件编程,防止头文件重复
【18】c/c++:指针,指针定义和使用,指针大小4字节,野指针,空指针*p=NULL
【19】c/c++:万能指针,泛型指针,const int *p,int const *p,int *const p,const int *const p,指针与数组,p++,
【20】c/c++:指针p+p-p*p/,数组&a+1,指针减指针,指针实现strlen函数,指针的比较运算,指针数组,多级指针
【21】c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参
【22】c/c++:数组做函数参数,传入函数的首地址,相当于传址,指针做函数返回值,数组止做c语言中函数的返回值
【23】c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格
【24】c/c++:带参数的main函数,int main(int argc, char* argv[]),main(int argc, char** argv),error c99是因为c版本过低


文章目录

  • c/c++:字符串str中寻找子串substr出现的次数
    • @[TOC](文章目录)
  • 在字符串str中,找substr出现的位置
  • c/c++:字符串str中寻找substr出现的次数
  • 复习最近的东西
  • 总结

在字符串str中,找substr出现的位置

在str中,找str出现的位置
俩参数
char* str
char* substr
返回int,即substr在str中出现的位置

这玩意上一节我说过的哦
【23】c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格

寻找指定字符串的位置

在这里插入图片描述
它只返回第一次匹配成功的地方

这个玩意呢?
是非常非常难的一个算法
叫kmp算法,我之前说过的
KMP算法:在字符串s中搜索匹配查找match字符串,如果能找到返回首个匹配位置i,否则返回-1

不过当时我们是优化代码
如果说LeetCode的话,它标记为easy了
它不需要优化

我们今天讲不需要优化的代码

返回子串在原串中的位置,地址,或者下标
都OK

在c语言中strstr函数就是干这件事的

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f85(void)
{
    char* ans = strstr("hello", "llo");
    printf("%s\n", ans);//有结果应该是一个字符串,没有就null
}


//带参数的main
int main(int argc, char* argv[])
{//固定的形式

    for (size_t i = 0; i < argc; i++)
    {
        printf("%s\n", argv[i]);//反正这些参数都能看的
    }
    f85();

    system("pause");
    return 0;
}

在这里插入图片描述
懂吧
咱们可以利用这个函数,继续完成下面的任务
这好说

在这里插入图片描述
注意,它返回的位置是第一个匹配上的,所以整个str后续一段字符串都会展示给我们哦

c/c++:字符串str中寻找substr出现的次数

俩参数
char* str
char* substr
返回int 个数,substr的个数

有了strstr函数
那么我们很清楚,strstr返回了substr的位置,我们从这个位置,后面继续找下一个

比如
hellollolllo
llo
自然它就会第一次返回这个
在这里插入图片描述

所以我们要继续拿着这个返回的串,去找llo
如果返回null说明再也没有了

注意,中间得到一个结果后,需要把llo去掉
在这里插入图片描述
否则永远死循环在那寻找llo



int strCount(char* str, char* substr)
{

    char* ans = strstr(str, substr);
    //printf("%s\n", ans);//有结果应该是一个字符串,没有就null
    int k = 0;//统计
    int len = strlen(substr);
    while (ans)
    {
        k++;//只要ans不空就可以
        ans = strstr(ans+len, substr);
    }
    return k;
}

void f86(void)
{
    char* str= "hellollollo";
    char* substr = "llo";
    int k = strCount(str, substr);
    printf("%d\n", k);
}

int main()
{//固定的形式

    f86();

    system("pause");
    return 0;
}

在这里插入图片描述
这样就搞定了

关键就在,你返回llollollo后
需要把第一个llo干掉
只需要ans指针挪动一下即可,长度是llo的长度
这样就不会重复查找了

后来可能java就根据这个搞了个substr函数,截取子串,本质就是c的指针操作

复习最近的东西

今后经常会用栈帧的概念
在这里插入图片描述
在这里插入图片描述
后续我们还会将这些

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode:24. 两两交换链表中的节点

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;24. 两两交换链表中的节点 题目描述&#xff1a;给你一个链表&#x…

第二章 Unity界面认识

本章节我们来认识一下Unity的主界面&#xff0c;如下所示 Unity的主界面虽然看的内容比较多&#xff0c;但是结构上还是比较清晰地&#xff0c;所以并不乱。从上到下&#xff0c;从左到右依次是菜单栏&#xff0c;工具栏&#xff0c;层次面板&#xff08;Hierarchy&#xff09;…

Docker Compose的常用命令与docker-compose.yml脚本属性配置

Docker Compose的常用命令与配置 常见命令ps&#xff1a;列出所有运行容器logs&#xff1a;查看服务日志输出port&#xff1a;打印绑定的公共端口build&#xff1a;构建或者重新构建服务start&#xff1a;启动指定服务已存在的容器stop&#xff1a;停止已运行的服务的容器&…

Android studio 使用入门

安装 安装JDK https://www.oracle.com/java/technologies/downloads/ 新增变量JAVA_HOME&#xff0c;值为JDK安装根目录 在path中增加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 安装 Android studio https://developer.android.google.cn/studio/ 注意&#xff1a;路径尽量不要包…

区间DP (Java) 解析/模板/案例

一. 区间DP简单介绍 区间DP&#xff0c;是经常会用到的、解决区间问题的一种方法&#xff0c;经常以动态规划&#xff08;dfs/记忆化搜索&#xff09;的形式展现&#xff0c;最核心的思想就是枚举区间&#xff08;枚举端点&#xff09;&#xff0c;寻找切割点&#xff0c;处理因…

java.util.List和java.util.Set区别

最近有个需求要求查询按照单号查询顺序&#xff0c;数据库是hbase,我看了之前代码没有通过查hbase进行排序&#xff0c;就问了前端看是否前端可以排序&#xff0c;答案是前端不会做排序&#xff1b;有2个接口其中之前的接口就是这样排序的&#xff0c;于是我就按个排查看不同之…

Java每日一练(20230426)

目录 1. 天际线问题 &#x1f31f;&#x1f31f;&#x1f31f; 2. 2 的幂 &#x1f31f;&#x1f31f; 3. 对称二叉树 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

这可能是最全面的Redis面试八股文了

Redis连环40问&#xff0c;绝对够全&#xff01; Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用 C 语言编写的&#xff0c;高性能非关系型的键值对数据库。与传统数据库不同的是&#xff0c;Redis 的数据是存在内存中的&#xf…

jmeter(四)HTTP请求

启动jmeter&#xff0c;建立一个测试计划 这里再次说说怎么安装和启动jmeter吧&#xff0c;昨天下午又被人问到怎样安装和使用&#xff0c;我也是醉了&#xff1b;在我看来&#xff0c;百度能解决百分之八十的问题&#xff0c;特别是基础的问题。。。 安装&#xff1a;去官网…

状态设计模式解读

目录 问题引进 状态模式基本介绍 基本介绍 状态模式的原理类图 对原理类图的说明 状态模式解决 APP 抽奖问题 状态模式的注意事项和细节 问题引进 请编写程序完成 APP 抽奖活动 具体要求如下: 1) 假如每参加一次这个活动要扣除用户 50 积分&#xff0c;中奖概率是 10% …

尚融宝23-后端管理系统借款审核

目录 一、借款信息列表展示 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;后端 &#xff08;三&#xff09;前端 二、借款详情 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;后端 &#xff08;三&#xff09;前端 三、借款审批 &#xf…

YOLOv7训练自己的数据集(txt文件,笔记)

目录 1.代码下载 2.数据集准备&#xff08;.xml转.txt) &#xff08;1&#xff09;修改图像文件名 &#xff08;2&#xff09;图片和标签文件数量不对应&#xff0c;解决办法 &#xff08;3&#xff09;.xml转.txt &#xff08;4&#xff09;.txt文件随机划分出对应的训练…

记录自己第一次项目管理(附件:WBS计划与会议纪要模板)

记录自己第一次项目管理 前言 20**年新入职到一家公司&#xff0c;刚到就接到紧急任务&#xff0c;因为上一个后端跑路&#xff0c;现在系统上出现接口报错、假接口的问题&#xff0c;客户又着急验收&#xff0c;所以入职之后&#xff0c;一直在着急改代码。最后因为系统没有…

Nginx+Tomcat负载均衡及动态分离

一.Nginx负载均衡实现原理 Nginx实现负载均衡是通过反向代理实现 1、 反向代理原理 2、反向代理的概念 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服…

Promise--代码实现-- ajax 传统方式和 promise 方式和 promise 代码优化/重排 方式的对比--综合代码示例

目录 Promise Promise 基本介绍 Promise 应用实例 代码实现 monster.json monster_detail_1.json 先使用 ajax 传统方式完成, 问题分析(出现回调函数嵌套) 使用 promise 方式 示意图: 使用 promise 代码优化/重排 方式完成 get.js方法 注意事项和使用细节 综合代码 …

C语言学习分享(第五次)------函数

函数 1.前言2. 什么是函数3. 库函数3.1 为什么会有库函数3.2 如何学习库函数3.3 参考文档学习库函数3.31 strcpy函数3.32 memset函数3.33 使用库函数应该包含的头文件 4.自定义函数5.函数的参数5.1 交换两数题目详解 6. 函数的调用6.1 传址调用6.2 传值调用 7. 函数的嵌套调用和…

【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

随机森林算法 Random Forest Algorithm 随机森林算法随机森林算法实现波士顿房价预测 随机森林算法 随机森林&#xff08;Random Forest&#xff09;算法 是一种 集成学习&#xff08;Ensemble Learning&#xff09;方法&#xff0c;它由多个决策树组成&#xff0c;是一种分类…

【RV1126】移植kaldi实时语音识别

文章目录 算法一、环境1.1 硬件环境--RV1126开发板1.2 交叉编译器1.3 需要Cmake版本大于3.1以上 二、交叉编译sherpa2.1 下载sherpa2.2 编译sherpa2.3 运行测试 三、下载模型四、语音测试4.1 单个语音文件解码测试4.2 开发板上使用alsa架构从MIC说话测试 算法 参考&#xff1a…

Mysql命令大全

一、mysql&#xff1a;连接Mysql数据库 mysql命令用户连接数据库。 mysql命令格式&#xff1a; mysql -h主机地址 -u用户名&#xff0d;p用户密码 连接到本机上的MYSQL 首先打开DOS窗口&#xff0c;然后进入目录mysql\bin&#xff0c;再键入命令mysql -u root -p&#xff0c;回…

开放式耳机有什么好处,分享几款知名度高的开放式耳机

开放式耳机是一种通过头骨传递声波的耳机&#xff0c;相比于传统的耳机&#xff0c;开放式耳机不用塞进耳道&#xff0c;而是在耳后的骨头里将声音传递到耳膜。而且因为不塞进耳朵&#xff0c;所以不用担心在使用过程中因为佩戴时间过长而导致的耳朵不适。所以相比于传统耳机来…