计算子字符串个数

字符串匹配问题:输入一个字符串,计算其中最长的包含连续给定的子字符串的个数。

例如输入字符串" EFABCABCABCDABCDD ” , 给定子字符串" ABC” ,输出是 3;输入字符串" abcdefg ” , 给定子字符串" cd” ,输出是 1 。

函数原型: int countsub( char *str, char *subs ) 。

参数说明: str 保存输入的字符串的首地址, subs 保存需要统计的子字符串的首地址。

返回值:包含的连续子字符串的个数。

预设代码

前置代码

view plainprint?

/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
 
#include <stdio.h>  
  
int countsub( char *str, char *ss );  
  
main( )  
{  
    char s1[1000] = {0}, s2[100] = {0};  
    gets(s1);  
    gets(s2);  
    printf("%d\n", countsub( s1, s2 ) );  
}  
  
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */  
测试用例 1以文本方式显示
  1. EFABCABCABCDABCDD↵
  2. ABC↵
以文本方式显示
  1. 3↵
测试用例 2以文本方式显示
  1. abcdefghi↵
  2. xyz↵
以文本方式显示
  1. 0↵

我的解答

#include <stdio.h>  
#include<string.h>
int countsub( char *str, char *ss )
  { int sum[100]={0},sum2=0;int k=strlen(ss);int j=0,i,p=0;
      for(i=0;i<strlen(str);i++)
      {
          if(str[i]==ss[j]){
          if(j<k-1){
              j++;
          }
        else{
            sum[p]++;j=0;
        }
          }
        else{
        p++;
            continue;
        }
      }
      for(i=0;i<p;i++){
              for(j=0;j<i;j++){
        if(sum[j]<sum[j+1])
        {
        int temp=sum[j];
        sum[j]=sum[j+1];
        sum[j+1]=temp;
         } 
      }

    }
    return sum[0];
  }
main( )  
{  
    char s1[1000] = {0}, s2[100] = {0};  
    gets(s1);  
    gets(s2);  
    printf("%d\n", countsub( s1, s2 ) );  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值