少しだけ、C言語はなれて違う勉強してましたが、戻ってきました...
と言うわけで、実はまだワイルドカードを作ってます...
'*'(0文字から何文字でも)と'?'(1文字)
はそれぞれできるようになったんですが、'*'と'?'を組合わせて
使う事が未だにできません。
どうか、アドバイスをお願いします。
int new_wild(char *entry, char *wild_name) { int w_len , e_len, i = 0 , j = 0, g ; char *start , *start2 , *end , *end2; char *buf = (char*)malloc(sizeof(char)*(strlen(wild_name + 1))); if( buf == NULL ) { free( buf ); return 1; } w_len = strlen( wild_name ); e_len = strlen( entry ); if(( wild_name[0] != '*' ) && ( wild_name[0] != '?')) { if( wild_name[0] != entry[0]) //検索文字列と検索対象文字列の最初と最後の文字 { //が、同じか'?'か'*'でなければ不一致 free( buf ); return -1; } } if((wild_name[ w_len - 1 ] != '*' ) && ( wild_name[ w_len - 1 ] != '?')) { if(wild_name[ w_len - 1 ] != entry[ e_len - 1 ]) { free( buf ); return -1; } } strcpy( buf , wild_name ); start = buf ; for(i = 0 ; i < w_len; i++) { if(wild_name == '*') { while( *start) { end = strchr( start ,'*' ); if( end ) { *end = '\0'; } if(( entry = strstr( entry , start )) == NULL ) { free( buf ); return -2; } entry += strlen( start ); start += strlen( start ) + 1 ; } } if(wild_name == '?') { if(wild_name != '*') //検索文字列に*がなかった場合検索文字列と { //対象文字列の長さを比較し違っていたら不一致 if(w_len != e_len) return -1; } for( g = 0; g < w_len; g++) { if(entry[g] != wild_name[g]) { if((wild_name[g] != '?') && (wild_name[g] != '*')) { return -1; } } } } j++; } printf("DEBUG i = %d j = %d \n",i,j); return 0; }