给定源字符串S和模式字符串P,计算模式字符串P在源字符串S中出现的次数。
输入格式: 第一行是源字符串S s.t. 1< = | S | < = 8192个字符 第二行是模式字符串P s.t. 1< = | P | < = 8192个字符
输出格式: 输出一个整数,其中包含源字符串S中模式字符串P的出现次数。
这段代码有什么不对?
#include<stdio.h>
int main()
{
int i=0,j=0,k=0,loss=0,noss=0;
char ms[8192],ss[8192];
scanf("%s",&ms);
scanf("%s",&ss);
while(ss[loss]!='\0')
{
loss=loss+1;
}
while(ms[i]!='\0')
{
j=0;
if(ms[i]==ss[0])
{
j=j+1;
k=i+1;
while(ss[j]!='\0')
{
if(ms[k]==ss[j])
j++;
else
break;
}
if(j==loss-1)noss++;
}
i++;
}
printf("%d",noss);
return(0);
}
测试案例1
输入:密西西比州 ISSI
预期输出:2
实际输出:2
测试案例2
输入:ouagadougou 欧
预期输出:3
实际输出:0
答案 0 :(得分:1)
18 if(ms[i]==ss[0])
19 {
20 j=j+1;
21 k=i+1;
22 while(ss[j]!='\0')
23 {
24 if(ms[k]==ss[j])
25 {
26 j++;
27 k++;
28 }
29 else
30 break;
31 }
32 if(j==loss)noss++;
33 }
答案 1 :(得分:0)
int PatternCount2(string s)
{
int result = 0;
bool mark = false;
bool inword = false;
for(char c: s) {
if(c == '1') {
if(mark && inword) {
// found pattren
result++;
// reset inword
inword = false;
}
mark = true;
}
if(c == '0' && mark){
inword = true;
}
}
return result;
}