X960402_ 2016-10-27 04:39 采纳率: 83.3%
浏览 949
已采纳

这段代码怎么改才能输出每一趟匹配过程??

#include "stdafx.h"
#include "stdio.h"
#define MaxSize 21
typedef struct //定义结构体类型
{
char data[MaxSize];
int length;
}SqString;
void StrAssign(SqString &s, char cstr[]) //将一个字符串常量赋给串s
{
int i;
for (i = 0; cstr[i] != '\0'; i++)
s.data[i] = cstr[i];
s.length = i;
}
void GetNextval(SqString t, int nextval[]) //对模式串t求nextval[]值
{
int j = 0, k = -1;
nextval[0] = -1;
while (j {
if (k == -1 || t.data[j] == t.data[k])
{
j++; k++;
if (t.data[j] != t.data[k])
nextval[j] = k;
else
nextval[j] = nextval[k];
}
else
k = nextval[k];
}
}
int KMPIndex(SqString s, SqString t)
{
int nextval[MaxSize], i = 0, j = 0;
GetNextval(t, nextval);
while (i {
if (j == -1 || s.data[i] == t.data[j])
{
i++;
j++;
}
else j = nextval[j];
}
if (j >= t.length)
return(i - t.length);
else
return -1;
}
int main(int argc, char* argv[])
{
SqString s1, s2;
int k;
char t[21] = { 'a', 'b', 'c', 'a', 'a', 'b', 'b', 'a', 'b', 'c', 'a', 'b', 'a', 'a', 'c', 'b', 'a', 'c', 'b', 'a' };
char p[8] = { 'a', 'b', 'c', 'a', 'b', 'a', 'a' };
StrAssign(s1, t);
StrAssign(s2, p);
k = KMPIndex(s1, s2);
if (k != -1)
printf("匹配,从第%d个数开始", k);
else
printf("不匹配");
return 0;

  • 写回答

3条回答 默认 最新

  • 保尔柯察杨 2016-10-28 08:54
    关注

    int KMPIndex(SqString s, SqString t);函数应该是你说的匹配函数吧,
    if (j == -1 || s.data[i] == t.data[j])这个判断语句里可以写打印语句,可以分别看到匹配双方的值

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

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)