// ==================================================== // Same program as Basic, but does NOT use i0 // ==================================================== import java.util.*; public class Basic2 { public static int Basic(String T, String P) { int i, j, m, n; n = T.length(); m = P.length(); i = 0; j = 0; while ( i < n ) { printState(T, P, i, j); // Show progress.... if ( P.charAt(j) == T.charAt(i) ) { System.out.println("++++ Match: try next pair of characters"); i++; j++; if ( j == m ) return( i-j ); // **** Replaced i0 by (i-j) } else { System.out.println("**** Mismatch: slide P"); i = i - j + 1; // ***** Replaced i0 by (i-j) j = 0; System.out.println("===================="); } } return(-1); } public static void main(String[] args) { int i, r; String T, P; Scanner in; int[] f; in = new Scanner( System.in ); System.out.println("Sample input:"); System.out.println("T = tomxatexatomatoxxx"); System.out.println("P = tomato"); System.out.println(); System.out.print("T = "); T = in.nextLine(); System.out.print("P = "); P = in.nextLine(); System.out.println(); System.out.println("Matching...."); System.out.println(); r = Basic(T, P); if ( r == -1 ) System.out.print("No match found..."); else { System.out.println("Match found at position " + r); System.out.println(); System.out.println("0123456789012345678901234567890123456789"); System.out.println(T); for (i = 0; i < r; i++ ) System.out.print(" "); System.out.println(P); System.out.println(); } } /* ===================================================== Variables and Methods to make the algorithm visual ===================================================== */ public static String T_ruler, P_ruler; public static String ruler(int n) { String out = ""; char x = '0'; for ( int i = 0; i < n; i++ ) { out = out + x; x++; if ( x > '9' ) x = '0'; } return out; } public static void printState(String T, String P, int i, int j) { if ( T_ruler == null ) T_ruler = ruler( T.length() ); if ( P_ruler == null ) P_ruler = ruler( P.length() ); System.out.println("====================================="); System.out.println("Matching: i = " + i + ", j = " + j); System.out.println(" " + T_ruler ); System.out.println(" " + T); System.out.print(" "); for ( int k = 0; k < i-j; k++) System.out.print(" "); System.out.println(P); System.out.print(" "); for ( int k = 0; k < i-j; k++) System.out.print(" "); System.out.println( P_ruler ); System.out.print(" "); for ( int k = 0; k < i; k++) System.out.print(" "); System.out.println("^"); System.out.print(" "); for ( int k = 0; k < i; k++) System.out.print(" "); System.out.println("|"); System.out.println(); } }