少しだけ、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;
}