#include using namespace std;string s = "zabcdefg";int index1(const string ss, int pos){ if (pos<0 || pos>s.length()) printf("pos²»ºÏ·¨£¡"); int i = pos, j = 0; while (i < s.length() && j < ss.length()) { if (s[i]==ss[j]) { i++; j++; } else { i=i-j+1; j=0; } } if (j>=ss.length()) return (i-j+1); else return -1;}void getnext(const string ss, int *next){ int i = 0, j = -1; next[i] = -1; while (i < ss.length()) { if (j == -1 || s[i] == ss[j]) { i++; j++; next[i]=j; } else j = next[j]; }}int index2(const string ss, int pos){ int *next = new int[ss.length()]; getnext(ss, next); int i = pos, j = 0; while (i < s.length() && j < ss.length()) { if (j==0 || s[i]==ss[j] ) { ++i; ++j; } else { j = next[j]; } }if (j >= ss.length()) return i-ss.length()+1; else return -1;}int main(){ string ss = "abc"; printf("index1: %d, index2: %d\n", index1(ss, 0), index2(ss, 0)); return 0;}