统计子串在母串出现的次数
编写一个函数,该函数可以统计一个长度为3的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asdasasdfgasdaszx67asdmklo
,字符串为:asd
,则应输出n=4
。
函数接口定义:
int fun(char *str,char *substr);
其中 str
和 substr
是用户传入的参数。函数统计substr
指针所指的字符串在str
指针所指的字符串中出现的次数,并返回次数。
裁判测试程序样例:
#include<stdio.h>
int fun(char *str,char *substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
int n;
n=fun(str,substr);
printf("n=%d\n",n);
return 0;
}
/* 请在这里填写答案 */
输出样例:
n=4
分析
#include<string.h>
int fun(char *str,char *substr){
int x=0;
for(int i=0;i<strlen(str);i++){
int y=0;
for(int j=0;j<strlen(substr);j++)
if(str[i+j]==substr[j]) //这里原来一直写成str[i],导致y一直只有1
y++;
if(y==strlen(substr))
x++;
}
return x;
}
#include<string.h>
int fun(char *str,char *substr){
int x=0;
while(*str){
char *p=str,*q=substr; //此行要在while里
int y=0;
while(*q){
if(*p==*q){
y++;
//printf("y=%d\n",y);
p++;
q++;
}
else
break;
}
if(y==strlen(substr)){
x++;
//printf("x=%d\n",x);
}
str++;
}
return x;
}
int fun(char *str,char *substr){
int x=0;
while(*str){
char *p=str,*q=substr;
if(*p==*q){
while(*q){
if(*p!=*q)
break;
p++;
q++;
}
if(*q=='\0')
x++;
}
str++;
}
return x;
}
#include<string.h>
int fun(char *str,char *substr){
int x=0;
for(int i=0;i<strlen(str);i++){
//printf("str=%s\n",&str[i]);
//printf("sub=%s\n",&substr[i]);
//printf("=========================\n");
if (str[i] == substr[0]) {
int flag=1;
for(int j=0;j<strlen(substr);j++){
//printf("str=%s\n",&str[i+j]);
//printf("sub=%s\n",&substr[j]);
//printf("----------\n");
if(str[i+j]!=substr[j]) {
flag=0;
break;
}
}
if(flag){
x++;
//printf("x=%d\n",x);
//printf("+++++\n");
}
}
}
return x;
}
要点
#include<string.h>
char str[100] = "safshttaha16t5a132a5";
int length = strlen(str);
参考资料: