您的位置:首页 > 编程语言 > C语言/C++

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

2017-12-28 21:58 906 查看
字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。

例如输入字符串“ EFABCABCABCDABCDD ” , 给定子字符串“ ABC” ,输出是 3

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

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

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

分析:根据题意我们主要需要解决两个问题:

1.如何去找到原字符串中的子字符串

2.原字符串中“连续”的子字符串个数

#include<stdio.h>

int countsub( char *str, char *ss )
{
int count = 0, i = 0;
//count用来计算子字符串的个数,i用来计算连续的子字符串个数
char *p = str, *q = ss;
while( *p != '\0')
{
q = ss; //每次都要初始化q指针,让它指向ss的第一个元素
if(*p == *q)//判断p,q指针指向的元素是否相等
{
while( *p++ == *q++ )//判断相等并且p,q向后移一位
{
if( *q == '\0')//当q指向最后'\0'时,就初始化q
{
q = ss;
count++;
//并且说明原字符串含有一个子字符串 count+1
}
}
if( i <= count)
//这里是判断所求子字符串个数是否为最多的一个
{
i = count;
count = 0;
}
}
else  //如果p,q指向的元素不同,p向后移一位
p++;
}

return i;  //返回i 的值
}
int main()
{
char s1[1000] = {0}, s2[100] = {0};
gets(s1);  //输入原字符串
gets(s2);  //输入子字符串

printf("%d\n", countsub( s1, s2 ));

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐