strstr-whiledowhile模型用于在母字符串中查找符合特征的子字符串。

c语言库提供了strstr函数,strstr函数用于判断母字符串中是否包含子字符串,包含的话返回子字符串的位置指针,不包含的话返回NULL。

可以用strstr函数+while模型或者 strstr函数+dowhile模型实现:

1 strstr函数+while模型

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int ncount = 0;
  char *p = "abcd156445abcd456444abcd46844564abcd";
  while (p = strstr(p, "abcd"))//指针p指向a
  {
    ncount++;
    p = p + strlen("abcd");
    if (*p == '\0')
    {
      break;
    }
  }
  printf("字符串中出现abcd的次数: %d \n", ncount);  //运行可得4

  system("pause");
  return 0;
}

2 strstr函数+dowhile模型

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int ncount = 0;
  char *p = "abcd156445abcd456444abcd46844564abcd";
  do
  {
    p = strstr(p, "abcd");
    if (p != NULL)
    {
      ncount++;
      p = p + strlen("abcd");//找到abcd,指针继续往前
    }
    else
    {
      break;
    }
  } while (*p != '\0');
  printf("字符串中出现abcd的次数: %d \n", ncount);

  system("pause");
  return 0;
  }

封装查找子字符串出现次数的API:

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int getCount(char*mystr, char*sub, int*ncount)
{
  bool ret = false;
  int tmpCount = 0;
  char*p = mystr;//记得函数中不要轻易改变形参的值

  //健壮代码
  if (mystr == NULL || sub == NULL)
  {
    ret = false;
    printf("fun getCount()err:%d (mystr == NULL || sub == NULL)\n", ret);
    return ret;
  }

  do
  {
    p = strstr(p, sub);
    if (p != NULL)
    {
      tmpCount++;
      p = p + strlen(sub); //指针达到下次查找的条件
    }
    else
    {
      break;
    }
  } while (*p != '\0');

  *ncount = tmpCount; //间接赋值是指针存在的最大意义
  ret = true;
  return ret;
}
int main()
{
  int count = 0;
  int ret = 0;
  char*p = "abcd156445abcd456444abcd46844564abcd";
  char *psub = "abcd";

  ret = getCount(p, psub, &count);
  if (ret <= 0)
  {
    printf("fun getCount()err:%d", ret);
  }
  printf("count:%d", count);
  system("pause");
  return 0;
}

项目开发常见字符串处理模型-strstr-while/dowhile模型的更多相关文章

  1. c语言实现常见字符串函数strchr strstr strcmp atoi itoi(字符串换成整数)

    好久没有更新博客了,刚刚出炉练练手的程序如下,很简单,没有考虑过多复杂的东西,有好的想法,欢迎指教: 字符查找函数: char *my_strchr(const char *s,int c) { ch ...

  2. 项目开发设计模式理解之MVC模式

    项目开发设计模式之MVC模式: M model 模型层 V view 视图层 C control 控制器 MVC模式在B/S架构下使用很广泛的软件设计模式,分成三个相对独立的模块构成,model+vi ...

  3. 团队项目开发中,常见的版本控制有svn,git

    团队项目开发中,常见的版本控制有svn,git

  4. Android项目开发全程(四)-- 将网络返回的json字符串轻松转换成listview列表

    前面几篇博文介绍了从项目搭建到获取网络字符串,对一个项目的前期整体工作进行了详细的介绍,本篇接着上篇介绍一下怎么样优雅将网络返回的json字符串轻松转换成listview列表. 先上图,看一下效果. ...

  5. 第八章 企业项目开发--分布式缓存memcached

    注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...

  6. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  7. Django学习笔记(19)——BBS+Blog项目开发(3)细节知识点补充

    本文将BBS+Blog项目开发中所需要的细节知识点进行补充,其中内容包括KindEditor编辑器的使用,BeautifulSoup 模块及其防XSS攻击,Django中admin管理工具的使用,me ...

  8. IOS开发UI基础之Plis文件-字典转模型

    什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程 ...

  9. ios项目开发汇总

    UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www. ...

随机推荐

  1. MSTP-多生成树协议

    多生成树协议MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定义的一种新型生成树协议.简单说来,STP/RSTP是基于端口的,PVST+是基于VLA ...

  2. Spring中新建记录后返回自增主键的处理方法

    接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制. Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值 ...

  3. Base 64 加密、解密

    1.写一个公共类 package com.boyutec.oss.sys.utils; import java.io.UnsupportedEncodingException; import java ...

  4. 批量插入bulkcopy

     public static void InsertBatch<T>(IDbConnection conn, IEnumerable<T> entityList, string ...

  5. [EXP]Memu Play 6.0.7 - Privilege Escalation

    # Exploit Title: Memu Play - Privilege Escalation (PoC) # Date: // # Author: Alejandra Sánchez # Ven ...

  6. IIS服务器多站点 的 https证书使用443端口 解决方案

    默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTTPS只能更改IIS配置 首先把每个站点分配个不同端口,如443.444.445…(证书一定要是多域的) 然后重 ...

  7. html和body的关系

    1.chrome浏览器 从上面数据我们可以看出,html作为body的容器,其大小就是我们可视窗口的大小,window.innerHeight与html的clientHeight相同即可验证. 同时, ...

  8. linux装tomcat遇到的坑

    最开始通过apt-get安装,各种毛病 然后下载tar.gz压缩包解压使用,运行startup.sh可以启动,但是看日志发现 Tomcat启动时卡在 INFO HostConfig.deployDir ...

  9. eclipse配置ant开发环境,一键部署项目

    ANT出现之前,编译和部署Java应用需要使用包括特定平台的脚本.Make文件.不同的IDE以及手工操作等组成的大杂烩.现在,几乎所有的开源Java项目都在使用Ant,许多公司的开发项目也在使用Ant ...

  10. 小白Python路上第一个难点,也是一个比较重要的点(闭包,迭代器,生成器)

    一.闭包 闭包就是在内层函数中引用外层函数的变量 作用:1.保护变量不受侵害          2.让一个变量永驻内存 二.迭代器 Iterator:迭代器,包含_iter_()和_next_()函数 ...