永发信息网

简单的数据结构 串的匹配 看我错哪里了

答案:1  悬赏:10  手机版
解决时间 2021-04-20 00:23
  • 提问者网友:咪咪
  • 2021-04-19 19:43

#include<stdio.h>
#include<malloc.h>
#define MAX 20
typedef struct
{
char s[MAX];
int len;
}SeqStr;

int StrIndex(SeqStr *&S,SeqStr *&T)
{
int i=1,j=1;
while (i<=S->len && j<=T->len)
if (S->s[i]==T->s[j]) //minus 1
{i++;j++;}
else
{i=i-j+2;j=1;}
if (j>T->len)
return i-T->len;
else
return 0;
}
void main()
{
SeqStr *S,*T;
S=(SeqStr *)malloc(sizeof SeqStr);
T=(SeqStr *)malloc(sizeof SeqStr);
scanf("%s",S->s);
scanf("%s",T->s);
printf("%d",StrIndex(S,T));
}
比如s=123456789
T=456
要输出T在S的第4个位置

最佳答案
  • 五星知识达人网友:旧脸谱
  • 2021-04-19 21:04
#include<stdio.h>
#include<malloc.h>
#include <string.h>
#define MAX 20
typedef struct
{
char s[MAX];
int len;
}SeqStr;

int StrIndex(SeqStr *&S,SeqStr *&T)
{
int i=0,j=0;
while (i <= S->len-T->len)
{
if (S->s[i]==T->s[j]) //minus 1
{i++;j++;}
else
{i=i-j+1;j=0;}
if (j==T->len)
return i-T->len;
}
return 0;
}

void main()
{
SeqStr *S,*T;
S=(SeqStr *)malloc(sizeof SeqStr);
T=(SeqStr *)malloc(sizeof SeqStr);
scanf("%s",S->s);
scanf("%s",T->s);
S->len = strlen(S->s);
T->len = strlen(T->s);
printf("%d",StrIndex(S,T)+1);
}

调试通过,附图:

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯