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