西安电子科技大学数据结构上机实验
//
// Created by 王文轩 on 2022/10/29.
//
# include "stdlib.h"
# include "stdio.h"
# include "string.h"
# define maxsize 1024
# define LEN sizeof(struct seqstring)
struct seqstring {
char ch[maxsize];
int len;
};
// 开辟字符串的函数:
struct seqstring *makestr();
// 顺序串朴素匹配:
int match(struct seqstring *, struct seqstring *, int *, int *);
int main(void) {
struct seqstring *tString, *pString;
int cnt = 0, pos = 0;
printf("******请输入目标串: ");
tString = makestr();
printf("******请输入模式串: ");
pString = makestr();
if (match(tString, pString, &cnt, &pos)) {
printf("匹配成功!比较次数为%d\n", cnt);
printf("返回第一次匹配成功的位置(首字母位序):%d\n", pos);
} else {
printf("匹配失败!比较次数为%d\n", cnt);
}
}
struct seqstring *makestr() {
struct seqstring *string = (struct seqstring *) malloc(LEN);
scanf("%s", string->ch);
string->len = strlen(string->ch);
return string;
}
int match(struct seqstring *t, struct seqstring *p, int *cnt, int *pos) {
int i = 1, j = 1;
while (i <= t->len && j <= p->len) {
if (t->ch[i - 1] == p->ch[j - 1]) {
i++;
j++;
} else {
i = i - j + 2;
j = 1;
}
(*cnt)++;
}
if (j > p->len) {
*pos = i - p->len;
return 1;
}
return 0;
}
/*
测试用例 1:
输入:
T:abcababcabc
P:abcabc
输出:
匹配成功! 比较次数为: 18
返回第一次匹配成功的位置(首字母位序): 6
测试用例 2:
输入:
T:abcababcabckka
P:abcabc
输出:
匹配成功! 比较次数为: 18
返回第一次匹配成功的位置(首字母位序): 6
测试用例 3:
输入:
T:abcababcabckka
P:abcabd
输出:
匹配失败! 比较次数为: 29
测试用例 4:
输入:
T:aaaaaaaaaaaaaaaaaaakuu
P: aaaaak
输出:
匹配成功! 比较次数为: 90
返回第一次匹配成功的位置(首字母位序): 15
测试用例 5:输入:
T:aaaaaaaaaaaaaaaaaaak
P:aaaaau
输出:
匹配失败! 比较次数为: 105
*/