#include #include #include #define MATCH 1 #define UMTCH 0 int rsrch(char *, char *); int main() { // char dic[480000][64], str[64]; /* 配列が大きすぎて Segmentation Fault になるため、 ファイル全部はを読み込まないように変更した */ char dicstr[64], str[64]; char *path = "/usr/share/dict/words"; FILE *fp; int i, len1, len2, mc=0; if( (fp=fopen( path, "r" )) == NULL ) { fprintf(stderr, "Cannot open dictionary file!\n"); exit(8); } printf("Enter string to search for : "); scanf("%s", str); while( fscanf(fp, "%s", dicstr) != EOF ){ len1 = strlen( dicstr ); len2 = strlen( str ); if( len2 > len1 ) continue; if( rsrch( dicstr+len1-len2, str ) == MATCH ){ mc++; printf("%5d : %s \n", mc, dicstr); } } fclose( fp ); printf("Total %d words matched [%s] \n", mc, str); return 0; } int rsrch(char *str1, char *str2){ if(*str1 == '\0') return MATCH; else { if(*str1 == *str2) return rsrch(str1+1, str2+1); /* 再帰的に呼ぶ */ else return UMTCH; } }