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

目录

  • 一、测试思路
  • 二、方式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.mfbz.cn/a/610596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 集合-List

集合主要分为两组(单列集合, 双列集合) Connection 接口有两个重要的子接口LIst 和 Set, 它们的实现子类都是单列集合, Map 接口的实现子类是双列集合, 存放的是 K-V Connection 接口 Collection 接口和常用方法 下面以 ArrayList 演示一下 add: 添加单个元素remove: 删除指…

基于GIS地理技术+智慧巡检解决方案(Word原件)

传统的巡检采取人工记录的方式&#xff0c;该工作模式在生产中存在很大弊端&#xff0c;可能造成巡检不到位、操作失误、观察不仔细、历史问题难以追溯等现象&#xff0c;使得巡检数据不准确&#xff0c;设备故障隐患得不到及时发现和处理。因此建立一套完善的巡检管理系统是企…

【C语言】——联合体与枚举

【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体   与…

TLF35584 Windows Watchdog

1、相关寄存器 1&#xff09;WWDCFG0 - Protected Window watchdog configuration request 0 *R2 offset Address&#xff1a;09H&#xff1b;Reset Value&#xff1a;06H&#xff1b; 窗口看门狗关窗口的周期默认值&#xff1a;350wd cycles 350ms。 2&#xff09;WWDCFG1…

国产银河麒麟V10SP1系统下搭建TiDB数据库操作步骤图文

开发目的&#xff1a;在国产银河麒麟系统中搭建TiDB数据库运行环境。 开发工具&#xff1a;银河麒麟系统V10SP1TiDBMySql数据库8.0。 具体步骤&#xff1a; 1、在VmWare虚拟机中安装好国产银河麒麟V10Sp1操作系统。 2、打开终端命令&#xff0c;安装TiDB相关软件&#xff1…

调试记录 CPU PCIE 找不到设备,AC 耦合电容的问题

1. 问题 现象&#xff1a; 1. 国产CPU的主板&#xff0c;主板内的PCIE 设备找的到&#xff0c;但是另一块板子上连接的PCIE 设备找不到。 2. 排查问题在哪里的计划 1. 检查原理图先排除信号定义的问题&#xff0c; TXRX是否反接。 2. 示波器检查PCIE 的时钟频率是否正确。 3. …

ESLint: Unexpected ‘debugger‘ statement.(no-debugger)(debugger报红)

ESLint: Unexpected debugger statement.(no-debugger) 解决办法&#xff1a; 找到.eslintrc.js文件中rules的no-debugger更改为0即可

队列的实现(使用链表)

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、队列的概念2、队列的链表实现方法2.1 前言2.2 正文2.2.1 队列的初始化2.2.2 队列的销毁…

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

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

服务器直连电脑(盒子直连电脑)电脑需要设置为固定ip才能访问盒子

文章目录 现象盒子设置为固定ip&#xff0c;pc设置成固定ip&#xff08;以太网网卡&#xff0c;realtak那个&#xff0c;不是tap-windows那个&#xff0c;tap-windows不用管&#xff09;&#xff0c;在pc上用ip搜索工具搜索&#xff0c;可以搜到盒子ip。盒子设置为固定ip&#…

phpstudy靶场访问显示404 Not Found

涉及靶场 upload-labd sqli-labs pikachu dvwa 以及所有部署在phpstudy中的靶场 一、检查phpstduy设置 localhost——管理——修改 1、根目录&#xff08;默认设置&#xff0c;不要改&#xff09; localhost这个域名必须保留&#xff0c;并且把根目录设置为phpstudy的WWW文…

性能测试工具——wrk的安装与使用

前言 想和大家来聊聊性能测试&#xff0c;聊到了性能测试必须要说的是性能测试中的工具&#xff0c;在这些工具中我今天主要给大家介绍wrk。 ​介绍 wrk是一款开源的性能测试工具 &#xff0c;简单易用&#xff0c;没有Load Runner那么复杂&#xff0c;他和 apache benchmar…

flutter开发实战-webview_flutter 4.x版本使用

flutter开发实战-webview_flutter 4.x版本使用 在之前使用的webview_flutter版本是3.x的&#xff0c;升级到4.x后&#xff0c;使用方式有所变化。 一、webview_flutter 在工程的pubspec.yaml中引入插件 webview_flutter: ^4.4.2二、使用webview_flutter 在4.x版本中&#…

umi6.x + react + antd的项目增加403(无权限页面拦截),404,错误处理页面

首先在src/pages下创建403&#xff0c;404&#xff0c;ErrorBoundary 403 import { Button, Result } from antd; import { history } from umijs/max;const UnAccessible () > (<Resultstatus"403"title"403"subTitle"抱歉&#xff0c;您无权…

如何使用Python为Excel文件添加预设文档属性和自定义文档属性

向Excel文件添加文档属性是专业地组织和管理电子表格数据的关键步骤。这些属性&#xff0c;如标题、作者、主题和关键词&#xff0c;增强了文件的元数据&#xff0c;使得在大型数据库或文件系统中跟踪、排序和搜索文档变得更加容易。通过包含这些信息&#xff0c;您不仅提高了文…

C++map和set(个人笔记)

Cmap和set 1.set1.1set的使用1.1.1 set的模板参数列表1.1.2set的构造1.1.3set的迭代器1.1.4 set的容量1.1.5 set修改操作1.1.6 set的具体使用例子 2.map2.1map的使用2.1.1map的模板参数列表2.1.2map的构造2.1.3map的迭代器2.1.4 map的容量与元素访问2.1.5 map中元素的修改2.1.6…

资源管理游戏模版进入The Sandbox

我们非常高兴地向您介绍 Game Maker 的最新模板&#xff1a;资源管理游戏&#xff01; 这一全新的模板让您能够深入身临其境的游戏体验中&#xff0c;同时掌握令人兴奋的新机制。通过揭开模板的神秘面纱&#xff0c;您可以锤炼您的游戏设计技能。 什么是资源管理游戏&#xff1…

【C语言和Java的对比学习】2(布尔类型、运算符、程序逻辑控制)

【C语言和Java的对比学习】2&#xff08;布尔类型、运算符、程序逻辑控制&#xff09; 1. 布尔类型变量2. 逻辑运算符的短路问题2.1 &&和||使用举例2.2 &和|的使用举例 3.位移运算4. switch语句 1. 布尔类型变量 下面我们直接先看下面一组代码的对比图。 注意&am…

马化腾用了一年多的时间,告诉所有人,视频号小店是新风口!

大家好&#xff0c;我是电商笨笨熊 当腾讯说出自己要做电商的时候&#xff0c;所有人都在说&#xff0c;根本不可能&#xff1b; 甚至在视频号小店正式推出之后&#xff0c;依旧有人说&#xff0c;腾讯做电商就是笑话&#xff1b; 一个“抄”过来的项目&#xff0c;毫无特色…

whisper之初步使用记录

文章目录 前言 一、whisper是什么&#xff1f; 二、使用步骤 1.安装 2.python调用 3.识别效果评估 4.一点封装 5.参考链接 总结 前言 随着AI大模型的不断发展&#xff0c;语音识别等周边内容也再次引发关注&#xff0c;通过语音转文字再与大模型交互&#xff0c;从而…