华科万维C++章节练习6_3

该文章提供了一个C++函数str_count,用于计算一个子字符串在给定的母字符串中出现的次数。函数通过遍历母字符串并逐字符比较来找到子字符串,如果匹配失败,则回溯并继续搜索。示例展示了如何使用该函数统计特定子串在给定字符串中的出现频率。
摘要由CSDN通过智能技术生成

【程序设计】

题目:函数str_count统计子字符串substr在字符串str中出现的次数,如果substr在str中不出现,
则返回值0。请完成该函数。

样例:

母串=ABCDabcd1234+-*/XYZxyz/ABCDabcd1234+-*/Aa1 ABCDabcd
待计数子串=123
子串在母串中共出现2次
请按任意键继续. . .  

 代码如下:

#include <iostream>
#include <cstring>
using namespace std;
/**********Program**********/
  
int str_count(char *substr,char *str)
  {
	  int count=0,i,j,flag=0;
	  char *p1=str;//子串头检索指针,在母串上从头到尾移动
	  int len2=strlen(substr),len1=strlen(str);
	  for(;*p1!='\0';)
	  {
		  flag=0;
		  if(*p1==substr[0])//匹配子串的头,匹配上了再去看子串后面能不能也对上
		  {
			  char *p2=substr,*p0=p1;
			  for(;*p2!='\0';p2++)
			  {
				  if(*p2!=*p1)
				  {
					  flag=1;
					  p1=p0;//子串身体不匹配,那么头检索指针要回到之前匹配好的“子串头”位置
					  //如果匹配,那么本if语句不执行,头检索指针将跳到这个子串的尾部的后一个位置,进行非重叠阅读
					  break;
				  }
				  p1++;
			  }
			  if(!flag)
				  count++;
		  }
		  p1++;//上一个“验明正身”,是假的,那么要去下一个;
	  }
	  return count;
  }

/**********  End  **********/

void main(void)
{
        char ss[100];
        char *s="ABCDabcd1234+-*/XYZxyz/ABCDabcd1234+-*/Aa1 ABCDabcd";
        cout<<"母串="<<s<<endl;
        cout<<"待计数子串=";
        cin.getline(ss,99);
        cout<<"子串在母串中共出现"<<str_count(ss,s)<<"次"<<endl;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季风13

谢谢认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值