注册 登录
编程论坛 C语言论坛

统计子串在母串出现的次数

黑暗骑士5DSB 发布于 2020-05-09 16:47, 3152 次点击
编写一个函数,该函数可以统计一个长度为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


完全不知道咋写啊啊啊,求指点
3 回复
#2
fengyinxqy2020-05-09 17:07
程序代码:
#include <stdio.h>
int StrCount(char *str, char *substr); //自定义函数声明。在母字符串中找子字符串的出现次数
int main()
{
    char str1[20];                 //初始化数组(母字符串)
    char str2[10];                //初始化数组(子字符串)
    int count = 0;

    printf("Enter str1:\n");
    scanf("%s",str1);
    printf("Enter str2:\n");
    scanf("%s",str2);

    count = StrCount(str1, str2); //调用函数
    printf("count is %d\n", count);

    return 0;
}
int StrCount(char *str, char *substr) //定义函数
{
    int number = 0;
    char *p; //字符串辅助指针
    char *q; //字符串辅助指针
    while (*str != '\0')
    {
        p = str;
        q = substr;
        while ((*p == *q) && (*p != '\0') && (*q != '\0')) //判断
        {
            p++;
            q++;
        }
        if (*q == '\0')
        {
            number++;
        }
        str++; //从下一个字符开始
    }
    return number;
}
#3
qing_yx2020-05-09 17:16
#include <stdio.h>
#include <string.h>

int fun(char *str, char *substr);
int main(void)
{
    char str[81] = "asdasasdfgasdaszx67asdmklo", substr[4] = "asd";
    int n;
    n = fun(str, substr);
    printf("n=%d\n", n);
    return 0;
}


int fun(char *str, char *substr)
{
    int ret = 0;
    char temp[4] = { 0 };

    for (int i = 0; str[i] != '\0';i++)
    {
        strncpy(temp, str+i, 3); //每次取3个字符给temp,再与substr比较

        if (strcmp(temp, substr) == 0)
            ret++;
    }
    return ret;
}
#4
吹水佬2020-05-09 20:37
用strstr()走一遍
1