「已注销」 2023-04-13 23:31 采纳率: 71.4%
浏览 79
已结题

用bf算法求子串第一次出现在主串的位置。

编写算法,查找模式串t在主串s中第一次出现的位置

输入格式:

首先输入主串s,在第二行中输入模式串t,s和t中不包含空格。

输出格式:

对于每组测试,若模式串t在主串s中出现,则输出t在s中的子串位置,否则输出0。

img


```c
#include<iostream>
#include<string.h>
using namespace std;
#define MAX 255
typedef unsigned char SString[MAX+1];
int Index(SString S,SString T,int pos)
{
    int i=pos,j=1;
    while(i<=S[0]&&j<=T[0])
    {
        if(S[i]==T[j])
        {
            i++;
            j++;
        }
        else
        {
            i=i-j+2;
            j=1;    
        }
    }
    if(j>T[0])
        return i-T[0];
    else
        return 0;
}
int main()
{
    SString S,T;
    cin>>S>>T;
    cout<<Index(S,T,1);
    return 0;
}

感觉少了定义数组T[0],S[0]为字符串长度而不存储字符的代码,不知道怎么下手。
运行输出错误 求解,最好能附上修改后的代码,学的太浑噩了,听不懂。

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-04-14 16:18
    关注

    修改如下,供参考:

    #include <iostream>
    #include <string>     //#include<string.h>
    using namespace std;
    #define MAX 255
    typedef unsigned char SString[MAX + 1];
    int Index(SString S, SString T) // , int pos) 修改
    {
        int i = 0, j = 0, pos = 0;
        while (S[i] && T[j]) //while (i <= S[0] && j <= T[0]) 修改
        {
            if (S[i] == T[j])
            {
                pos = i;
                while (S[pos] == T[j] && T[j] && S[pos]) pos++, j++; //修改
                if (T[j])  i++, j = 0;                     //修改
            }
            else
            {
                i++;
                j = 0;
                //i = i - j + 2; 修改
                //j = 1;         修改
            }
        }
        if (!T[j])   //if (j > T[0])
            return  i + 1; //i - T[0];
        else
            return 0;
    }
    int main()
    {
        SString S, T;
        cin >> S;    // 修改
        cin >> T;    
        cout << Index(S, T); //, 1);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表