0001 #include "match_test.h" 0002 0003 void printNext(int* N, int offset, int length) { //显示Next[]表,供演示分析 0004 for (int i = 0; i < offset; i++) printf(" "); 0005 for (int i = 0; i < length; i++) printf("%4d", i); printf("\n"); 0006 for (int i = 0; i < offset; i++) printf(" "); 0007 for (int i = 0; i < length; i++) printf("%4d", N[i]); printf("\n\n"); 0008 } 0009 0010 void printBC(int* bc) { //显示bc[]表,供演示分析 0011 printf("\nbc[] Table\n"); 0012 for (size_t j = 0; j < 128; j++) if (0 <= bc[j]) printf("%4c",(char) j); printf("\n"); 0013 for (size_t j = 0; j < 128; j++) if (0 <= bc[j]) printf("%4d", bc[j]); printf("\n\n"); 0014 } 0015 0016 void printGS(char* P, int* GS) { //显示GS[]表,供演示分析 0017 printf("\ngs[] Table\n"); 0018 for (size_t m = strlen(P), j = 0; j < m; j++) printf("%4d", j); printf("\n"); 0019 printString(P); printf("\n"); 0020 for (size_t m = strlen(P), j = 0; j < m; j++) printf("%4d", GS[j]); printf("\n\n"); 0021 } 0022 0023 /****************************************************************************************** 0024 * Text : 0 1 2 . . . i i+1 . . . i+j . . n-1 0025 * ------------------------|-------------------|------------ 0026 * Pattern : 0 1 . . . j . . 0027 * |-------------------| 0028 ****************************************************************************************** 0029 * 动态显示匹配进展 0030 * i为P相对于T的起始位置,j为P的当前字符 0031 ******************************************************************************************/ 0032 void showProgress(char* T, char* P, int i, int j) { 0033 } 0034 0035 int match(char*, int, char*, int); //可接驳不同算法 0036 0037 int main(int argc, char* argv[]) { 0038 if (3 > argc) { fprintf(stderr, "\nUsage: %s <Text> <Pattern>\n\nFor example %s \"now is the time for all good people to come\" people\n\n", argv[0], argv[0]); return -1; } 0039 for (int i = 0; i < (argc-1)/2*2; i += 2) { 0040 char* T = argv[i+1]; int n = strlen(T); 0041 char* P = argv[i+2]; int m = strlen(P); 0042 int pos = match(T, n, P, m); 0043 getchar(); 0044 } 0045 return 0; 0046 } //main