泫溯 2024-06-28 18:45 采纳率: 94.7%
浏览 2
已结题

这是一道C++程序问题,希望大家解答?

下面的函数统计子字符串substr在字符串str中出现的次数


int str_count(char* substr, char* str)
{
    int count = 0;
    int n=0,m=0;
    while (*substr) {
        n++;
        substr++;
    }
    while (*str)
    {
        m++;
        str++;
    }
    int j = 0;
    for (int i = 0; i < m; i++)
    {
        if (j == n-1) {
            count++; j = 0;
        }
        if (str[i] == substr[j])
        {
            j++;
        }
        else if(j==n-1||str[i]!=substr[j])
        {
            j = 0;
            //continue;
        }
        
        
    }
    return count;
}
int main()
{
    char s1[5] = "god";
    char  s[20] = "lagodgodogod";
    cout <<str_count(s1, s);
    return 0;
}


我主函数这个用例一直不对,输出一直是4不知道哪里写错了

  • 写回答

2条回答 默认 最新

  • micthis 2024-06-28 20:04
    关注

    你两个指针都移动到指向'\0'了,应重新指向第一个字符

    #include<iostream>
    
    using namespace std;
    
    int str_count(char* substr, char* str)
    {
        int count = 0;
        int n=0,m=0;
        while (*substr) {
            n++;
            substr++;
        }
        substr-=n;
        while (*str)
        {
            m++;
            str++;
        }
        str-=m;
        int j = 0;
        for (int i = 0; i < m; i++)
        {
            if (str[i] == substr[j])
            {
                j++;
                if (j == n) {
                    count++;
                    j = 0;
                }
            }
            else
            {
                j = 0;
            }
            
        }
        return count;
    }
    int main()
    {
        char s1[5] = "god";
        char  s[20] = "lagodgodogod";
        cout <<str_count(s1, s);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月13日
  • 已采纳回答 7月5日
  • 创建了问题 6月28日