递归 搜索 C语言 返回,c语言递归实现的通配符搜索

#include

#include

bool WildSearch(char *psz_buf, int n_buflen, char *psz_sub, int n_sublen, bool b_full, char sz_prechar)

{

if (n_buflen == 0 && n_sublen != 0)

{

if (n_sublen == 1 && psz_sub[0] == '*')

{

return true;

}

else

{

return false;

}

}

else if (n_buflen != 0 && n_sublen == 0)

{

if (b_full)

{

return false;

}

else

{

return true;

}

}

else if (n_buflen == 0 && n_sublen == 0)

{

return true;

}

if (psz_sub[0] == '*')

{

psz_sub++;

n_sublen--;

if (n_sublen == 0)

{

return true;

}

return WildSearch(psz_buf, n_buflen, psz_sub, n_sublen, b_full, '*');

}

else if (psz_sub[0] == '?')

{

psz_buf++;

n_buflen--;

psz_sub++;

n_sublen--;

return WildSearch(psz_buf, n_buflen, psz_sub, n_sublen, b_full, '?');

}

else

{

char *psz_star_pos = strchr(psz_sub, '*');

char *psz_question_pos = strchr(psz_sub, '?');

int n_len_to_star = (psz_star_pos == NULL) ? (int)strlen(psz_sub) : (int)(psz_star_pos - psz_sub);

int n_len_to_question = (psz_question_pos == NULL) ? (int)strlen(psz_sub) : (int)(psz_question_pos - psz_sub);

int n_compare_len = n_len_to_question > n_len_to_star ? n_len_to_star : n_len_to_question;

if (_strnicmp(psz_buf, psz_sub, n_compare_len) == 0)

//if (psz_buf[0] == psz_sub[0])

{

sz_prechar = psz_sub[0];

psz_buf++;

n_buflen--;

psz_sub++;

n_sublen--;

return WildSearch(psz_buf, n_buflen, psz_sub, n_sublen, b_full, sz_prechar);

}

else

{

if (sz_prechar != '*')

{

return false;

}

psz_buf++;

n_buflen--;

return WildSearch(psz_buf, n_buflen, psz_sub, n_sublen, b_full, sz_prechar);

}

}

return true;

}

int main(int argc, char** argv)

{

char sz_buf[] = "abcdefghijkabc";

char sz_sub[] = "abc?e*fg?i?*k*";

//char sz_sub[] = "ae";

bool b_result = WildSearch(sz_buf, (int)strlen(sz_buf), sz_sub, (int)strlen(sz_sub), false, ' ');

printf("%d/n", b_result);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值