C/C++の宿題を片付けます 89代目
■ このスレッドは過去ログ倉庫に格納されています
0261デフォルトの名無しさん
2007/06/09(土) 00:59:46これで早くなってるんじゃないかな?
#include <stdio.h>
#include <string.h>
#define DICT "web2"
#define DIVNUM 50 // 適当な数
int main(int argc, char **argv) {
FILE *fp;
size_t wlen, filesize, pos, pos_prev;
char buff[4096];
if (argc == 1) return 1;
wlen = strlen(argv[1]);
if ((fp = fopen(DICT, "r")) == NULL) return 2;
fseek(fp, 0L, SEEK_END);
filesize=ftell(fp);
fseek(fp, 0L, SEEK_SET);
for(pos=pos_prev=0;pos<filesize;pos_prev=pos,pos+=filesize/DIVNUM+1) { // +1 で無限ループ回避
fseek(fp, pos, SEEK_SET);
fgets(buff, sizeof(buff), fp);
if(fgets(buff, sizeof(buff), fp)==NULL) break;
if(strncasecmp(buff, argv[1], wlen)>=0) break;
}
fseek(fp, pos_prev, SEEK_SET);
while (fgets(buff, sizeof buff, fp)) {
int n = strncasecmp(buff, argv[1], wlen);
if (n == 0) fputs(buff, stdout);
else if (n > 0) break;
}
fclose(fp);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています