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;
} 展开
例如输入字符串“ 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;
} 展开
2个回答
展开全部
#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,真是能折腾人。改了个,你看看,符合你要求不。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询