字符串
#include <stdio.h>
#include <stdlib.h>
#include "seqstring.h"
int main()
{
char str_target[] = "aabcbabcaabcaababc";
char str_pattern[] = "abcaababc";
int next[] ={-1,0,0,-1,1,0,2,0,0};
Pseqstring target = create_array_seqstring(str_target);
Pseqstring pattern = create_array_seqstring(str_pattern);
printf("%d\n",index(target, pattern, next));
return 0;
}
#ifndef _SEQSTRING_H_
#define _SEQSTRING_H_
struct seqstring
{
int maxnum;
int n;
char* c;
};
typedef struct seqstring* Pseqstring;
Pseqstring create_null_seqstring(int m);
Pseqstring create_array_seqstring(char str[]);
int index(Pseqstring target, Pseqstring pattern, int next[]);
#endif // _SEQSTRING_H_
#include "seqstring.h"
#include <string.h>
Pseqstring create_null_seqstring(int m)
{
Pseqstring pstr;
pstr = (Pseqstring)malloc(sizeof(struct seqstring));
pstr->maxnum = m;
pstr->n = 0;
pstr->c = (char*)malloc(sizeof(char) * m);
return pstr;
}
Pseqstring create_array_seqstring(char str[])
{
Pseqstring pstr;
pstr = create_null_seqstring(100);
int len = strlen(str);
for(int i = 0; i < len; i++)
pstr->c[i] = str[i];
pstr->n = len;
return pstr;
}
int index(Pseqstring target, Pseqstring pattern, int next[])
{
int i = 0;
int j = 0;
while(i < pattern->n && j < target->n){
if(i == -1 || pattern->c[i] == target->c[j]){
i++;
j++;
}
else{
//j = j - i + 1;
//i = 0;
i = next[i];
}
}
//return j - i;
if( i >= pattern->n)
return j - pattern->n + 1;
else
return 0;
}