source为目标字符串,searchfor为子串。
通过变量k来控制目标字符串是否出现子串。
找到了返回子串在目标字符串出现的起始位置(从1开始),没找到返回-1
#include<string.h>
int find(char source[], char searchfor[]){
int k = 0;
for(int i = 0;source[i]!='\0';i++){
if( k==0&&source[i] == searchfor[k]){
k++;
continue;
}
if(k>0 && source[i] == searchfor[k]){
k++;
if(k==strlen(searchfor)){
return i-k+1;//返回目标字符串的子串末尾-子串长度+1
}
continue;
}
k = 0;
}
return -1;//没找到返回1
}
source为目标字符串,searchfor为子串。
计算目标字符串中子串数量
char s1[1005] s2[1005];
int main()
{
fgets(s1,1004,stdin);
fgets(s2,1004,stdin);
int len1 = strlen(s1)-1,len2 = strlen(s2)-1;
int ans = 0;
for(int i = 0;i+len2-1<len1;i++)
{
int matched = 1;
for(int j = 0;j<len2;j++)
{
if(s1[i+j]!=s2[j])
{
matched = 0;
break;
}
}
if(matched)
ans++;
}
printf("%d",ans);
}