c语言,计算子字符串个数,现在输入abcabcdgabc,应该是输出2,实际输出3

字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。例如输入字符串“EFABCABCABCDABCDD”,给定子字符串“ABC”,输出是3。函数原型:... 字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。
例如输入字符串“ EFABCABCABCDABCDD ” , 给定子字符串“ ABC” ,输出是 3 。
函数原型: int countsub( char *str, char *subs ) 。
参数说明: str 保存输入的字符串的首地址, subs 保存需要统计的子字符串的首地址。
返回值:包含的连续子字符串的个数。
#include <stdio.h>
main( )
{
int countsub( char *str, char *ss );
char s1[1000] = {0}, s2[100] = {0};
gets(s1);
gets(s2);
printf("%d\n", countsub( s1, s2 ) );
}
int countsub( char *str, char *ss )
{int t=0;
for(;*str!='\0';str++)
{
if(*str==*(ss)&&*(str+1)==*(ss+1)&&*(str+2)==*(ss+2))
{ t++; str=str+2; continue;}
if(*str==*(ss)&&*(str+1)==*(ss+1))
{t++;str=str+1;continue;}
if(*str==*(ss))
{t++;continue;}
}
return t;
}
展开
 我来答
百度网友83cdc1c
推荐于2016-11-19 · TA获得超过5788个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:820万
展开全部
#include <stdio.h>
main( )
{
 int countsub( char *str, char *ss );
    char s1[1000] = {0}, s2[100] = {0};
    gets(s1);
    gets(s2);
    printf("%d\n", countsub( s1, s2 ) );
}
int countsub( char *str, char *ss )
{
    int t=0;
    char *p1=str,*p2=NULL;
    while(p1=strstr(p1,ss))
    {
        if(p1!=p2+strlen(ss))
            t=(t==0)?1:t;
        else
            t++;
        p2=p1;
        p1+=strlen(ss);
    }
    return t;
}

楼主的算法有些问题,你可以试一下s1为ababa,s2为aba的情况,会得到2,但实际只有1。

我改了个,你看看。

更多追问追答
追问
主函数不能改啊,strstr,strlen不能用
追答
#include <stdio.h>
main( )
{
 int countsub( char *str, char *ss );
    char s1[1000] = {0}, s2[100] = {0};
    gets(s1);
    gets(s2);
    printf("%d\n", countsub( s1, s2 ) );
}
int countsub( char *str, char *ss )
{
    int t=0,i,j;
    int len;
    char *p1,*p2;
    for(len=0,p1=ss;*p1!='\0';p1++,len++);
    p1=str;
    p2=NULL;
    for(i=0;p1[i]!='\0';i++)
    {
        for(j=0;j<len;j++)
            if(p1[i+j]!=ss[j])
                break;
        if(j==len)
            break;
    }
    if(p1[i]=='\0')
        p1=NULL;
    else
        p1=p1+i;
    while(p1!=NULL)
    {
        if(p1!=p2+len)
            t=(t==0)?1:t;
        else
            t++;
        p2=p1;
        p1+=len;
        for(i=0;p1[i]!='\0';i++)
        {
            for(j=0;j<len;j++)
                if(p1[i+j]!=ss[j])
                    break;
            if(j==len)
                break;
        }
        if(p1[i]=='\0')
            p1=NULL;
        else
            p1=p1+i;
    }
    return t;
}

不能用strstr和strlen,真是能折腾人。改了个,你看看,符合你要求不。

M丶小民子
2013-05-23 · TA获得超过185个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:97.7万
展开全部
abc abc dg abc 这的确有3个abc,你看错了吧?
追问
是要连续的abc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式