/* probably suboptimal */ int measureit(char *string, char *seq) { int i; for(i = 0; *string && *seq; string++, i++) { if(*string == *seq) { *seq++; if(!*seq) return i + 1; } } return -1; } int findit(char *string, char *seq) { int best = 0x7fffffff; int bestpos = -1; int i; for(i = 0; string[i]; i++) { int l = measureit(string + i, seq); if(l < best && l >= 0) { bestpos = i; best = l; } } return bestpos; } main() { char buf[1024]; char pattern[1024]; printf("enter buffer: "); scanf("%s", buf); printf("enter pattern: "); scanf("%s", pattern); printf("smallest substring containing entire sequence is at pos %i\n", findit(buf, pattern)); }