努力挤进IT行业的小白 2022-12-18 12:23 采纳率: 66.7%
浏览 45
已结题

来个人给我看看问题吧


#include<Stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAX 200

typedef struct
{
    char ch[MAX];
    int length;
}string;

void initstring(string &S)     //串的输入 
{
    char e;
    int i = 1;
    printf("请输入字符串:"); 
    scanf("%c", &e);
    while(e !='\n')
    {
        S.ch[i] = e;
        i++;
        scanf("%c", &e);
    } 
    S.length  = i-1;
}

void printfstring(string &S)       //打印串 
{
    int i;
    printf("线性表内字符串为:");
    for(i = 1; i <= S.length; i++)
    {
        printf("%c", S.ch[i]);
    }
    printf("\n");
}

bool substring(string &Sub,string S, int pos, int len)      //输出串S的一个子串,子串为第pos个位置开始后一共len个字符 
{
    if(pos<1 || len<0 || pos>S.length || pos+len-1>S.length)
        return false;
    for(int i = 1; i <= len; i++)
        Sub.ch[i] = S.ch[pos+i-1];
    Sub.length = len;
    printfstring(Sub);
    return true;    
}
 
int index(string S,string T)         //模式匹配BF算法 
{
    int i = 1,j = 1;
    while(i<=S.length && j<=T.length)
    {
        if(S.ch[i] == T.ch[j])
        {
            i++; j++;
        }        
        else
        {
            i = i - j + 2;
            j = 1;
        }
    } 
    if(j>=T.length) return i-T.length;
    else return 0; 
}

void nextarray(string S, int *next) 
{
    next = (int*)malloc(MAX * sizeof(int));
    next[1] = 0;
    int j = 0;
    int i = 1;
    while(i < S.length)
    {
        if(j == 0 || next[i] == next[j])
         next[i++]  = ++j; 
        else
         j = next[j];
    }
    next[0] = S.length;
}

void printfnext(int *next)
{
    int i;
    printf("next数组中的数据为:"); 
    for(i = 1; i <= next[0]; i++)
    printf("%d", next[i]);
}

int main(void)
{
    string S;
    initstring(S);
    printfstring(S);
    
    string Sub;
    int pos,len; 
    printf("请输入你要获取串S中子串的起始位置和长度:");
    scanf("%d %d", &pos,&len);
    substring(Sub, S, pos, len);
    int e;
    e = index(S, Sub);
    printf("子串Sub在主串S的第%d个位置处", e);
    int *next;
    nextarray(Sub, next);
    printfnext(next);
    
    return 0;
 } 

img

为什么运行到这里不动了,也不结束,也出不来next数组,这是什么问题呢,来个人给我看一看吧

  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-12-18 12:51
    关注

    这块while循环里, 代码跑死循环了,你看看。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 修改了问题 12月18日
  • 修改了问题 12月18日
  • 展开全部

悬赏问题

  • ¥15 速帮,学校需要在外上班没空
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义