#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct { //定义结构体
char ch[MAXSIZE];
int length;
}SString;
void InitSString(SString &S){ //初始化结构体
S.length = 0;
}
void Scanfs(SString& S){ //遍历输入串
char a;
a = getchar();
while (a != '\n'){
S.length++;
S.ch[S.length] = a;
a = getchar();
}
}
void Printfs(SString S) { //遍历输出串
int a = 1;
while (a <= S.length)
{
putchar(S.ch[a]);
a++;
}
printf("\n");
}
void JDPPSF(SString S,SString T){ //简单匹配模式算法
int i = 1, j = 1, n = 1;
while (j <= T.length && i <= S.length){
if (S.ch[i] == T.ch[j]){
i++; j++;
}
else{
i = n + 1; j = 1; n++;
}
}
if ((j - 1) == T.length) printf(" t在s中的位置为%d\n",n);
else printf(" s串中找不到与t匹配的串\n");
}
void Printfj(SString S){ //遍历输出j序号
printf(" j ");
int i = 1;
while (i<=S.length){
printf("%d ", i); i++;
}
printf("\n");
}
void Printft(SString S) { //遍历分隔输出t串
printf(" t[j] ");
int a = 1;
while (a <= S.length){
if (a < 10) {
printf("%c ", S.ch[a]);
a++;
}
else {
printf("%c ", S.ch[a]);
a++;
}
}
printf("\n");
}
void Getnext(SString T,int next[]){ //得到next数组
int i = 1, j = 0; next[1] = 0;
while (i < T.length){
if (j == 0 || T.ch[i] == T.ch[j]){
++i; ++j; next[i] = j;
}
else j = next[j];
}
}
void Printfnext_val(SString T, int next[]) { //遍历输出next或nextval数组
int i = 1;
while (i <= T.length) {
if (i >= 10) {
printf("%d ", next[i]); i++;
}
else {
printf("%d ", next[i]); i++;
}
}
printf("\n");
}
void Getnextval(SString T, int next[],int nextval[])//得到nextval数组
{
int j = 2; nextval[1] = 0;
while (j <= T.length)
{
if (T.ch[j] != T.ch[next[j]]) {
nextval[j] = next[j]; j++;
}
else {
nextval[j] = nextval[next[j]]; j++;
}
}
}
int main()
{
SString S, T;
int next[MAXSIZE],nextval[MAXSIZE];
InitSString(S);
InitSString(T);
printf("请输入串s:");
Scanfs(S);
printf("请输入串t:");
Scanfs(T);
printf("串s:");
Printfs(S);
printf("串t:");
Printfs(T);
printf("简单匹配算法:\n");
JDPPSF(S, T);
Printfj(T);
Printft(T);
Getnext(T, next);
printf(" next[j] ");
Printfnext_val(T,next);
Getnextval(T, next, nextval);
printf("nextval[j] ");
Printfnext_val(T, nextval);
system("pause");
}
匹配字符串
最新推荐文章于 2024-06-27 16:51:33 发布