由于项目原因要实现"通配符匹配",看别人的算法,都是要2到3个函数来实现,一个为最初调用,一个为星号处理。能不能一函数就搞定呢?以下的算法只用一个函数实现同样的功能。写得不当地方,请多多指教。呵呵。 #include <stdio.h> #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef OK #define OK 0 #endif #ifndef ERROR #define ERROR -1 #endif #define WC_MATCH_YES 0 #define WC_MATCH_NO 1 #define WC_MATCH_ERROR -1 /* * wildcard match * * @text text to match * @wildcard wildcard string * @flag loop flag * * mark: just match wildcard '*' and '?'. */ int match_text(const char *text, const char *wildcard, int flag) { if( NULL == text || NULL == wildcard ){ return WC_MATCH_ERROR; } if( '/0' == *text && '/0' == *wildcard ){ return WC_MATCH_YES; } if( TRUE == flag ){ // no loop int ret = match_text(text, wildcard, FALSE); return ( ret == WC_MATCH_YES ) ? WC_MATCH_YES : match_text(text+1, wildcard, TRUE); } if( ('/0' == *text && '/0' != *wildcard && '*' != *wildcard) || ('/0' != *text && '/0' == *wildcard) ){ return WC_MATCH_NO; } switch(*wildcard){ case '*': return match_text(text, wildcard+1, TRUE); case '?': return match_text(text+1, wildcard+1, FALSE); default: if( *text == *wildcard ){ return match_text(text+1, wildcard+1, FALSE); }else{ return WC_MATCH_NO; } } } typedef struct { char *text; char *wildcard; }mystruct; mystruct array[] = { { "", "*" }, { "wuyao", "*" }, { "wuyao", "wu*" }, { "wuyao", "*ao" }, { "wuyao", "*wuyao*" }, { "wuyao", "w*a*o" }, { "wuyao", "w*ya*o" }, { "wuyao", "?????" }, { "wuyao", "????" }, { "wuyao", "????o" }, { "wuyao", "?*??o" }, { "wuyao", "uya*o" }, { "wuyao", "wuyaoo*" }, { "wuyao", "wya*o" }, }; int main() { int i; for( i = 0; i < sizeof(array)/sizeof(array[0]); i++){ if( OK == match_text(array[i].text, array[i].wildcard, FALSE) ){ printf("text: %s; wildcard: %s; result: OK/n", array[i].text, array[i].wildcard); }else{ printf("text: %s; wildcard: %s; result: ERROR/n", array[i].text, array[i].wildcard); } } }