c语言查找字符串中指定字符串的个数

news2024/11/25 5:03:42

目录

  • 一、测试思路
  • 二、方式1
  • 三、方式2

一、测试思路

  使用C语言来查找一个字符串中指定数量的子字符串,使用 strncmp 函数或者 memcmp 函数,遍历主字符串并计数子字符串出现的次数。或者使用 strstr 函数strstr 函数是 C 语言标准库 <string.h> 中的一个函数,它用于在一个字符串中查找另一个字符串首次出现的位置。虽然 strstr 本身并不直接返回子字符串出现的次数,但可以使用它作为基础来编写一个函数来计算子字符串出现的次数。

二、方式1

  测试代码,程序定义了一个countSubstring函数,它接受两个参数:主字符串和子字符串。然后,它遍历主字符串,并使用strncmp函数来检查当前位置开始的子串是否与给定的子字符串匹配。如果匹配,则计数器增加。最后,它返回计数器的值。代码如下:

#include <stdio.h>  
#include <string.h>  
  
// 函数声明  
int countSubstring(const char *mainStr, const char *subStr);  
  
int main(void) 
{  
    const char *mainStr = "Hello, hello world! Hello everyone.";  
    const char *subStr = "Hello";  
  
    int count = countSubstring(mainStr, subStr);  
    printf("Substring %s appears %d times in %s.\n", subStr, count, mainStr);  
  
    return 0;  
}  
  
// 函数定义:计算子字符串在主字符串中出现的次数  
int countSubstring(const char *mainStr, const char *subStr) 
{  
    int mainStrLen = strlen(mainStr);  
    int subStrLen = strlen(subStr);  
    int count = 0; 
    int mainLen= mainStrLen-subStrLen;
    for (int i = 0; i <= mainLen; i++) 
    {  
        if (strncmp(&mainStr[i], subStr, subStrLen) == 0) 
        { 
	    printf(" mainStr %s \r\n i=%d\n",  &mainStr[i],i);  
            count++;  
        }  
    }  
    return count;  
}

测试结果:
在这里插入图片描述
或者 memcmp 函数

#include <stdio.h>  
#include <string.h>  
  
// 函数声明  
int countSubstring(const char *mainStr, const char *subStr);  
  
int main(void) 
{  
    const char *mainStr = "Hello, hello world! Hello everyone. Hello Hello";  
    const char *subStr = "Hello";  
  
    int count = countSubstring(mainStr, subStr);  
    printf("Substring %s appears %d times in %s.\n", subStr, count, mainStr);  
  
    return 0;  
}  
  
// 函数定义:计算子字符串在主字符串中出现的次数  
int countSubstring(const char *mainStr, const char *subStr) 
{  
    int mainStrLen = strlen(mainStr);  
    int subStrLen = strlen(subStr);  
    int count = 0; 
    int mainLen= mainStrLen-subStrLen;
    for (int i = 0; i <= mainLen; i++) 
    {  
        if (memcmp(&mainStr[i], subStr, subStrLen) == 0) 
        { 
	    printf(" mainStr %s \r\n i=%d\n",  &mainStr[i],i);  
            count++;  
        }  
    }  
    return count;  
}

三、方式2

  测试代码,countSubstringWithStrstr 函数使用了一个 while 循环和 strstr 函数来查找子字符串在主字符串中的位置。每次找到子字符串后,计数器 count 增加,并将 ptr 指针移动到子字符串之后的位置,以便在下一次迭代中继续查找。当 strstr 返回 NULL 时,表示已经查找完整个主字符串,没有找到更多的子字符串,循环结束。最后,函数返回计数器的值,即子字符串在主字符串中出现的次数。代码如下:

#include <stdio.h>  
#include <string.h>  
  
// 函数声明  
int countSubstringWithStrstr(const char *mainStr, const char *subStr);  
  
int main(void) 
{  
    const char *mainStr = "Hello, hello world! Hello everyone.";  
    const char *subStr = "Hello";  
  
    int count = countSubstringWithStrstr(mainStr, subStr);  
    printf("Substring %s appears %d times in %s.\n", subStr, count, mainStr);  
  
    return 0;  
}  
  
// 函数定义:使用strstr计算子字符串在主字符串中出现的次数  
int countSubstringWithStrstr(const char *mainStr, const char *subStr) 
{  
    int count = 0;  
    const char *ptr = mainStr;  
    while ((ptr = strstr(ptr, subStr)) != NULL) 
    {
        printf(" mainStr %s \r\n i=%d\n",  ptr,ptr-mainStr);    
        count++;  
        ptr += strlen(subStr); // 移动到子字符串之后的位置继续查找  
    }  
    return count;  
}

测试结果:
在这里插入图片描述

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

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

相关文章

CTF—AWD防御起手式

前言 AWD (Attack With Defence)&#xff0c;比赛中每个队伍维护多台服务器&#xff0c;服务器中存在多个漏洞&#xff0c;利用漏洞攻击其他队伍可以进行得分&#xff0c;修复漏洞可以避免被其他队伍攻击失分。 改SSH密码 官方在给出服务器密码时&#xff0c;很有可能是默认…

苹果公司因iPad广告争议而道歉,承认“未达标”|TodayAI

周二&#xff0c;苹果公司发布了一则新的iPad Pro广告&#xff0c;引起了广泛争议&#xff0c;该公司随后发表道歉声明&#xff0c;承认这则广告“未达标”。这则名为“压碎&#xff01;”的广告意图展示全新的M4芯片iPad Pro的创意潜力&#xff0c;但却因其表现方式而备受批评…

【python基础】python经典题目100题

文章目录 前言初阶题目1.字符串2.列表3.元组4.字典5.运算6.random 模块7.open函数8.time模块时间9.其他 进阶题目 前言 本文主要是python经典题目100题&#xff0c;适合入门的新手。仅作自己学习的记录。 初阶题目 1.字符串 题目1&#xff1a;怎么找出序列中的最⼤最⼩值&am…

C++ Builder XE EnumWindowsProc遍历所有窗口的名称

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { // 这里可以添加你的处理逻辑 // 例如&#xff0c;将句柄添加到列表中或者其他操作 // 这里我们仅仅输出到调试窗口 OutputDebugString(L"枚举窗口句柄: "); char windowHandle[10];…

智慧互联,统信UOS V20桌面专业版(1070)解锁办公新模式丨年度更新

从小屏到大屏 突破&#xff0c;就在方寸之间 从人机到智脑 融合&#xff0c;旨在新质生产力 统信UOS一直致力于将先进科技与用户场景相结合&#xff0c;不断提升用户的工作效率和生产力。在最新发布的统信UOS V20桌面专业版&#xff08;1070&#xff09;版本中&#xff0c;我们…

2024年10大AI动画工具

在当今快节奏的数字环境中&#xff0c;动画师和内容创作者不断寻求创新工具来提高他们的工作效率和创造力。随着人工智能的出现&#xff0c;动画发生了显着的转变&#xff0c;因此提供了大量的选项&#xff0c;使图像无缝地栩栩如生。 无论你是一位有抱负的动画师还是经验丰富…

海外多语言盲盒系统开发:加快盲盒企业出海

近几年&#xff0c;全球都进入到了潮玩文化发展期&#xff0c;在这种时代背景下&#xff0c;盲盒迅速发展&#xff0c;与消费者建立了深厚的情感连接&#xff0c;市场规模逐渐扩大。目前&#xff0c;我国盲盒企业纷纷布局海外市场&#xff0c;纵观海外庞大的发展空间&#xff0…

翻译《The Old New Thing》 - Restating the obvious about the WM_COMMAND message

Restating the obvious about the WM_COMMAND message - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20060302-10/?p32093 Raymond Chen 2006年03月02日 关于 WM_COMMAND 消息的显而易见的知识点补充 简要 本文详细解释了 WM_COMMAND 消息…

Maven的使用

1.第一个Maven工程 1.1 创建约定目录结构 ​ Hello ​ src ​ ——main(存放主程序) ​ ————java(存放源代码文件) ​ ————resources(存放配置文件和资源文件) ​ ——test(存放测试程序) ​ ————java ​ ————resources ​ pom.xml 1.2 创建核心文件 pom.xml …

【Linux】编写一个简易的shell

思维导图 学习目标 将简易的shell代码进行编写。 一、阐述shell的基本思路 在进程程序替换中&#xff0c;我们可以将一个指令交给子进程&#xff0c;让子进程去完成这个指令。如果这个命令是一个内建命令&#xff0c;我们需要将这个命令交给bash进行处理。 大致思路是&#xf…

如何免费获得进仓数据库专家认证(帮你省50块钱)

这篇文章分三个部分 50块钱解决&#xff08;全靠自己钱可能打水漂考试只有三次机会&#xff09;50块钱解决&#xff08;全靠自己考试只有三次机会。&#xff09;30块钱解决&#xff08;考试靠我&#xff0c;报名费帮你0元处理&#xff0c;要求只有在线大学生。能力有限只能考K…

【用文本生成歌声】Learn2Sing 2.0——歌声转换算法及梅尔频谱详解

一. 频谱图与梅尔谱图的介绍 频谱图&#xff1a;频谱图可以理解为一堆垂直堆叠在一起的快速傅里叶变换结果。 1.1 信号 在进入频谱图模块之前&#xff0c;首先我们需要了解信号是什么。 信号就是某一特定量随时间变化&#xff0c;对于音频来说&#xff0c;这个特定的变化量就…

马斯克:脑机接口迎来首例植入者,芯片接线发生故障。

马斯克旗下的脑机接口公司Neuralink近日传出关于首例植入者诺兰阿博脑机接口芯片故障的消息。根据Neuralink发布的文章&#xff0c;诺兰阿博的脑机设备发生了故障&#xff0c;多根植入他大脑的接线已经脱落&#xff0c;导致获取数据量减少。目前该公司正在研究导致接线脱落的原…

Taro 快速开始

大家好我是苏麟 , 今天聊聊Trao. 官网 : Taro 介绍 | Taro 文档 (jd.com) 点击快速开始 全局安装 CLI 初始化一个项目 选择配置 : 根据自己需求选择 安装失败先不用管 , 用前端工具打开项目 npm install 安装 , 显示安装失败 怎么解决 ? : 查看报错信息 百度 , 问 AI 工具 运…

HAL PWM 配置 占空比 频率 stm32 学习笔记

title: HALPWM配置占空比频率 tags: STM32ClionHal 1.STM32CubeMX学习笔记&#xff08;13&#xff09;——PWM输出(呼吸灯)使用 2.STM32标准库HAL库 | 高精度动态调节PWM输出频率占空比 看你cubemx 里面的配置时钟频率是多少 参照第二篇文章描述修改 下面俩个参数就行 uin…

栈与递归的实现

1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#x…

数组排序和去重 巨坑!!!紧急避雷

首先&#xff0c;我们要先知道数组的排序和去重操作怎么使用。此处采用C语言。 1.排序操作 #include<iostream> #include <vector> #include<algorithm>using namespace std; int main() {vector<int>arr { 9,1,7,8,6,7,3,6,3 };sort(arr.begin(), a…

加密 加签

加密&#xff1a;一种通过将数据转换成不可读形式的方法&#xff0c;以防止未授权的访问 加签&#xff1a;侧重于验证数据的完整性和来源的真实性&#xff0c;确保数据未被篡改且来源可靠 加密和加签的区别 加密加签目的保护数据的机密性验证数据的完整性和来源的真实性使用方…

windows连接CentOS数据库或Tomcat报错,IP通的,端口正常监听

错误信息 数据库错误&#xff1a; ERROR 2003 (HY000): Cant connect to MySQL server on x.x.x.x (10060) Tomcat访问错误&#xff1a; 响应时间过长 ERR_CONNECTION_TIMED_OUT 基础排查工作 【以下以3306端口为例&#xff0c;对于8080端口来说操作是一样的&#xff0c;只需…

界面组件DevExpress Blazor UI v23.2新版亮点:图表组件全新升级

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…