15.5問題8 K回以上重複する最長の部分文字列を探索

[前回の基本形に重複する回数を数える部分を追加しただけ.
入力に作ったテキストの末尾に,勝手に改行が追加されて鬱陶しかったのでヌル文字で上書き. :p

// K回以上重複するフレーズを探索する
void find_common_word(FILE * fp, int N, int K){
	char * buff = new char[N];
	char ** suffix = new char*[N];

	char c;
	int i;
	for(i=0; (c=fgetc(fp))!=EOF && i<N-1; i++){
		buff[i] = c;
		if(buff[i]=='\n'){
			buff[i]='\0';
		}
		suffix[i] = &buff[i];
	}
	buff[i]='\0';
	suffix[i] = &buff[i];

	print_words(suffix, i);
	typedef int (*cmp_func)(const void*,const void*);
	qsort(suffix, i, sizeof(char*), (cmp_func)&strcmp2);
	print_words(suffix, i);

	int maxlen=0;
	int maxindex=-1;
	bool keep=false;

	for(int k=0,count=0; k<i-1; k++){
		int len=strlen(suffix[k]);
		int j;
		for(j=0; k+j<i-1; j++){
			int comlen=common_length(suffix[k], suffix[k+j]);
			if(comlen<len){
				break;
			}
		}

		if(j>K && len>maxlen){ // K回以上重複した?
			maxlen=len;
			maxindex=k;
		}
	}

	if(maxindex>=0){
		cout << "maxlen=" << maxlen << endl;
		cout << "maxindex=" << maxindex << endl;
		cout << "string=[" << endl;
		cout << "\t[" << suffix[maxindex]   << "]" << endl;
		cout << "\t[" << suffix[maxindex+1] << "]" << endl;
	}

	delete buff;
	delete suffix;
}

「珠玉のプログラミング」読み終わった〜!やたー!
まとめは今度書く.
まぁ既に次が積み上がってるわけですが….(Amazon仕事しすぎだろjk)