字符串匹配问题:输入一个字符串,计算其中最长的包含连续给定的子字符串的个数。
例如输入字符串" EFABCABCABCDABCDD ” , 给定子字符串" ABC” ,输出是 3;输入字符串" abcdefg ” , 给定子字符串" cd” ,输出是 1 。
函数原型: int countsub( char *str, char *subs ) 。
参数说明: str 保存输入的字符串的首地址, subs 保存需要统计的子字符串的首地址。
返回值:包含的连续子字符串的个数。
预设代码
前置代码
/* 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 | 以文本方式显示
| 以文本方式显示
|
测试用例 2 | 以文本方式显示
| 以文本方式显示
|
我的解答:
#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 ) );
}