²é¿´: 1916  |  »Ø¸´: 16

huycwork

½ð³æ (ÖøÃûдÊÖ)

¡ï ¡ï ¡ï ¡ï ¡ï ¡ï
Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû
dubo(½ð±Ò+1): лл½»Á÷ 2011-05-29 21:43:22
΢³¾¡¢ÃÎÏë(½ð±Ò+4): лл²ÎÓ룡 2011-05-30 17:55:00
°³À´¸öµÝ¹é¸÷ÖÖ¸´ÔӰ棬²»È·¶¨µÄ״̬»úÕæÊÇÂ鷳͸ÁË¡£Ãâ·ÖÎö£¬Ö±½ÓÉÏ´úÂ룬C++°æ±¾£º
CODE:
#include
#include
using namespace std;
/*
* ²ÎÊý˵Ã÷
* strΪ´ýÆ¥Åä×Ö·û´®
* regΪͨÅä·û±í´ïʽ
* isΪstrµÄµ±Ç°Ë÷Òý£¬¼´´ÓµÚis¸ö×Ö·û¿ªÊ¼Æ¥Åä
* irΪregµÄµ±Ç°Ë÷Òý£¬¼´´ÓµÚir¸ö×Ö·û¿ªÊ¼Æ¥Åä
*/
bool reg_match(const string &str, const string ®, size_t is = 0, size_t ir = 0){
        if(ir == reg.size() - 1){
                //*ÊÇ̰À·µÄ£¬ÒÔ*½áβµÄÈκαí´ïʽ¶¼±íʾƥÅä
                if(reg.back() == '*')
                        return true;
                //ÒÔ?½áβµÄregÓöµ½×Ö·û´®½áβҲ±íʾƥÅä
                if((reg.back() == '?')&&(is == str.size()-1))
                        return true;
                //regºÍstrµÄβ×Ö·ûÆ¥Åä
                if(is == str.size() - 1)
                        return str.back() == reg.back();
        }
        bool res = false;
        char flagc;
        for(size_t i = is; i < str.size(); ++i){
                switch(reg.at(ir)){
                case '*':
                        //ÉèÖñêÖ¾£¬*ºóÃæµÄµÚÒ»¸ö±êÖ¾¶¨Î»Ê²Ã´Ê±ºò¿ªÊ¼ÏÂÒ»²ãÆ¥Åä
                        if(reg.at(ir+1) == '?'){
                                if(reg.size() == ir+2)
                                        return true;
                                flagc = reg.at(ir+2);
                        }else{
                                flagc = reg.at(ir+1);
                        }
                        //̰À·Æ¥Å䣬³ÔµôÓöµ½flag֮ǰµÄÈκβÙ×÷·ûÖ®ºóÆ¥ÅäÏÂÒ»²ã
                        for(size_t rsi = str.size() - 1; rsi >= is; --rsi){
                                if(str.at(rsi) == flagc){
                                        if(reg_match(str, reg, rsi, ir+1))
                                                return true;
                                }
                        }
                        return false;
                case '?':
                        //0Æ¥ÅäºÍ1Æ¥Å䣬ÓÅÏÈ1Æ¥Åä
                        if(reg_match(str, reg, is+1, ir+1))
                                return true;
                        return reg_match(str, reg, is, ir+1);
                default:
                        //ÆäÓà×Ö·ûÈ¡ÏàµÈÆ¥Åä
                        if(str.at(is) == reg.at(ir))
                                return reg_match(str, reg, is+1, ir+1);
                        return false;
                }
        }
        return false;     //Ãâ±àÒë´íÎó£¬Ó¦ÅŰæÐèÒªµÄβ°Í
}

int main(){
        using namespace std;
        string str("ababacdbadcbaecdef");
        string reg("ab*c*a?e*f");
        cout<         return 0;
}

˵Ã÷£º
*Ϊ̰À··ûºÅ£¬?Ò²ÊÇ̰À·µÄ£¬Õâ¾ÍÊÇ˵£¬*.txt»áÍêÕûÆ¥Åäabc.txt.txt£¬?c»áÓÅÏÈÆ¥Åäac¶ø²»ÊÇc¡£
Òâ˼¾Í´ó¸ÅÊÇÕâ¸öÒâ˼ÁË£¬¸ù¾Ý¸ø³öµÄͨÅä±í´ïʽ£¬¶ÔÓ¦µ½ÕýÔò±í´ïʽ£¬È磺
ab*c*a?e*f => ab.*c.*a.?e.*f

»¶Ó­Ö¸µãÌÖÂÛ¡£

[ Last edited by huycwork on 2011-5-29 at 21:57 ]
äöÎеÄÖÐÐÄÓÐÒ»¿é¿ÕµØ£¬¿Õ¿ÕµÄ¡£
11Â¥2011-05-29 21:35:14
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

460104898

Í­³æ (ÕýʽдÊÖ)

ÓÐË­¿ÉÒÔÓÃCдһ¸ö°¡£¿
´ó¼ÒÒ»Æð½»Á÷Ï¡£
Çô
12Â¥2011-05-30 11:57:11
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

holmescn

½ð³æ (ÕýʽдÊÖ)

¡ï ¡ï ¡ï ¡ï ¡ï ¡ï
Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû
΢³¾¡¢ÃÎÏë(½ð±Ò+5): лл²ÎÓ룡 2011-05-30 17:55:24
дÁËÒ»¸öCµÄ£¬²»¹ý£¬Ã»ÓÐÑϸñ²âÊÔ¡£¶øÇÒÎÒ¸ÄÁËͨÅäµÄÒâ˼£¬Ò²¾ÍÊÇ?´ú±íÒ»¸ö×Ö·û£¬*´ú±íÖÁÉÙÒ»¸ö×Ö·û¡£ÁíÍâÓÐÒ»¸ö¼ÙÉ裬ÄǾÍÊÇ*ºóÃæ²»ÊÇͨÅä·û¡£
CODE:
#include
#include

#define BUFSZ 1000

int main(int argc, char** argv) {
    char str[BUFSZ], re[BUFSZ];
    char *pStr, *pRe;
    int lenStr, lenRe;
    int stat = 0;

    memset(str, BUFSZ, 0);
    memset(re , BUFSZ, 0);

    pStr = str;
    pRe  = re;

    printf("Input match string:");
    scanf("%s", re);
    lenRe = strlen(re);

    printf("Input string to match:");
    scanf("%s", str);
    lenStr = strlen(str);

    while ((pRe - re) < lenRe && (pStr - str) < lenStr && stat == 0) {
        printf("%c, %c\n", *pRe, *pStr);
        switch(*pRe) {
            case '*':
                pRe++;
                while(*pStr != *pRe && (pStr - str) < lenStr) pStr++;
                break;
            case '?':
                pRe++;
                pStr++;
                break;
            default:
                if(*pRe++ != *pStr++) {
                    puts("Not Match");
                    stat = 1;
                }
                break;
        }
    }
    if(stat == 0) puts("Match");
    return 0;
}

[ Last edited by holmescn on 2011-5-30 at 13:47 ]
13Â¥2011-05-30 13:37:46
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

460104898

Í­³æ (ÕýʽдÊÖ)

¡ï ¡ï ¡ï ¡ï ¡ï
΢³¾¡¢ÃÎÏë(½ð±Ò+5): лл²ÎÓ룡 2011-05-30 17:55:48
int GetMatchStr(const char* ArrStr,const char* KeyStr)
{
    switch (*KeyStr)
    {
    case '\0':
        return (*ArrStr=='\0')? 1:0;
    case '?':
        return (*ArrStr=='\0')? 0:GetMatchStr(ArrStr+1,KeyStr+1);
    case '*':
        return (*ArrStr=='\0')? GetMatchStr(ArrStr,KeyStr+1):
            GetMatchStr(ArrStr+1,KeyStr)|GetMatchStr(ArrStr,KeyStr+1);
    default:
        return (*ArrStr!=*KeyStr)? 0:GetMatchStr(ArrStr+1,KeyStr+1);
    }
}
Çô
14Â¥2011-05-30 17:11:15
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

460104898

Í­³æ (ÕýʽдÊÖ)

ÉÏÃæÒ»¸öÊÇÎÒͬѧÓõݹéдµÄ¡£¡£
Ï뵱ϬÀû°¡¡£
Çô
15Â¥2011-05-30 17:12:04
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

huycwork

½ð³æ (ÖøÃûдÊÖ)

¡ï ¡ï
Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû
jjdg(½ð±Ò+1): ¸Ðл²ÎÓë 2011-05-31 00:27:54
ÒýÓûØÌû:
Originally posted by 460104898 at 2011-05-30 17:11:15:
int GetMatchStr(const char* ArrStr,const char* KeyStr)
{
    switch (*KeyStr)
    {
    case '\0':
        return (*ArrStr=='\0')? 1:0;
    case '?':
        return (*ArrStr=='\0')? 0:GetMat ...

Äã˵µÄC´úÂë¾ÍÊÇÕâ¸öÒâ˼°¡£¿
ÕâÖÖ´úÂë¾ÍÊÇÄÇÖÖʡӲÅ̲¢ÇÒûÓа취ÓÅ»¯Ò²²»´òËãÈñðÈËÓÅ»¯µÄ´úÂ룬ÔÙ´øÉϰ²È«ÐÔÉÔ΢²îһЩ¡£ÔçÖªµÀ¾Í¸Ã¸øÄãÕâÖÖ´úÂ룬²»¹ÜÔõô˵£¬ÉÙÁ˼¸ÐУº
CODE:
int matchStr(const char *str, const char *reg){
  if(*reg == '?'){
    return *str && matchStr(str+1, reg+1) || matchStr(str, reg+1);
  }else if(*reg == '*'){
    return *str ? matchStr(str+1, reg) || matchStr(str, reg+1) : 1;
  }
  return (*str == *reg) && (*str == 0) ? matchStr(str+1, reg+1) : 0;
}

[ Last edited by huycwork on 2011-5-31 at 10:12 ]
äöÎеÄÖÐÐÄÓÐÒ»¿é¿ÕµØ£¬¿Õ¿ÕµÄ¡£
16Â¥2011-05-30 18:09:24
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

holmescn

½ð³æ (ÕýʽдÊÖ)

¡ï ¡ï
Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû
jjdg(½ð±Ò+1): ¸Ðл²ÎÓë 2011-05-31 00:28:02
ÐÞ¸ÄÁËһϣ¬ÏÖÔÚÖ»ÊÇÒ»¸öJust RunµÄ°æ±¾¡£¿ÉÄÜ»áÓÐBug
CODE:
#include

#define BUFSZ 1000

int main(int argc, char** argv) {
    char str[BUFSZ], re[BUFSZ];
    char *pStr, *pRe;
    char *pStr0;
    int stat = 0;

    memset(str, BUFSZ, 0);
    memset(re , BUFSZ, 0);

    pStr = str;
    pStr0= str;
    pRe  = re;

    printf("Input match string:");
    scanf("%s", re);

    printf("Input string to match:");
    scanf("%s", str);

    while (*pRe != '\0' && *pStr != '\0' && pStr0 != '\0' && stat == 0) {
        printf("%c, %c, %c\n", *pRe, *pStr, *pStr0);
        switch(*pRe) {
            case '*':
                pRe++;
                if (*pRe == '*' || *pRe == '?') break;
                while(*pStr != *pRe && *pStr != '\0') pStr++;
                break;
            case '?':
                pRe++;
                pStr++;
                break;
            default:
                if(*pRe != *pStr++ && *pRe != *pStr0++) {
                    stat = 1;
                }
                pRe++;
                break;
        }
    }
    if(stat == 0)
        puts("Match");
    else
        puts("Not Match");
    return 0;
}

ÎÒ¾õµÃÓ¦¸Ã¸øÒ»×étestcase£¬ÕâÑùÓиö±ê×¼²âÊÔ¡£

[ Last edited by holmescn on 2011-5-30 at 23:29 ]
17Â¥2011-05-30 23:27:31
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ 460104898 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[˶²©¼ÒÔ°] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +4 8rmuugja8q 2026-02-22 8/400 2026-02-23 12:22 by alian_214
[»ù½ðÉêÇë] ÌåÖÆÄÚ³¤±²ËµÌåÖÆÄÚ¾ø´ó²¿·ÖÒ»±²×ÓÔڵײ㣬ÈçͬÄãÃÇÒ»Ñù´ó²¿·ÖÆÕͨ½ÌʦæÇÒÊÕÈëµÍ +10 ˲ϢÓîÖæ 2026-02-20 13/650 2026-02-23 11:23 by holypower
[¿¼ÑÐ] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +3 khieu8v8m0 2026-02-22 8/400 2026-02-23 09:35 by w4l55oybr1
[ÂÛÎÄͶ¸å] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +4 khieu8v8m0 2026-02-22 8/400 2026-02-23 09:29 by w4l55oybr1
[¿¼ÑÐ] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +5 usprnugpzw 2026-02-21 11/550 2026-02-23 09:24 by w4l55oybr1
[½Ìʦ֮¼Ò] ΪʲôÖйú´óѧ¹¤¿Æ½ÌÊÚÃÇË®ÁËÄÇô¶àËùνµÄ¶¥»á¶¥¿¯£¬µ«»¹ÊÇ×ö²»³öÓîÊ÷»úÆ÷ÈË£¿ +5 »¶ÀÖËÌÒ¶Ýè 2026-02-21 8/400 2026-02-23 09:19 by »¶ÀÖËÌÒ¶Ýè
[ÂÛÎÄͶ¸å] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +3 w89i99eaeh 2026-02-22 5/250 2026-02-23 08:04 by w4l55oybr1
[²©ºóÖ®¼Ò] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +4 khieu8v8m0 2026-02-22 6/300 2026-02-23 07:59 by w4l55oybr1
[²©ºóÖ®¼Ò] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +6 3dfhjxgsh7 2026-02-22 9/450 2026-02-23 07:49 by w4l55oybr1
[˶²©¼ÒÔ°] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +4 khieu8v8m0 2026-02-22 8/400 2026-02-23 06:24 by w4l55oybr1
[¿¼²©] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +5 3dfhjxgsh7 2026-02-22 6/300 2026-02-23 02:04 by 5jlh3qtdvx
[½Ìʦ֮¼Ò] °æÃæ·Ñ¸Ã½»Âð +7 Æ»¹ûÔÚÄÄÀï 2026-02-22 8/400 2026-02-22 22:37 by otani
[»ù½ðÉêÇë] ÃæÉÏ¿ÉÒÔ³¬¹ý30Ò³°É£¿ +4 °¢À­¹±aragon 2026-02-22 4/200 2026-02-22 21:22 by ɽÎ÷Ðü¿ÕË¿ÕÐüÎ
[ÂÛÎÄͶ¸å] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +4 usprnugpzw 2026-02-21 6/300 2026-02-22 19:48 by w89i99eaeh
[¿¼ÑÐ] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +3 3dfhjxgsh7 2026-02-22 4/200 2026-02-22 16:52 by khieu8v8m0
[ÕÒ¹¤×÷] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +3 usprnugpzw 2026-02-22 3/150 2026-02-22 16:37 by khieu8v8m0
[¹«Åɳö¹ú] ÊÛSCIÒ»ÇøÎÄÕ£¬ÎÒ:8 O5 51O 54,¿ÆÄ¿ÆëÈ«,¿É+¼± +3 usprnugpzw 2026-02-21 4/200 2026-02-22 16:27 by khieu8v8m0
[»ù½ðÉêÇë] ¡°ÈËÎÄÉç¿Æ¶øÂÛ£¬Ðí¶àѧÊõÑо¿»¹Ã»ÓдﵽÃñ¹úʱÆÚµÄˮƽ¡± +4 ËÕ¶«ÆÂ¶þÊÀ 2026-02-18 5/250 2026-02-22 16:07 by liangep1573
[»ù½ðÉêÇë] ʲôÊÇÈËÒ»Éú×îÖØÒªµÄ£¿ +4 ˲ϢÓîÖæ 2026-02-21 4/200 2026-02-22 11:44 by huagongfeihu
[»ù½ðÉêÇë] ½ñÄê´ºÍíÓм¸¸ö½ÚÄ¿ºÜ²»´í£¬µãÔÞ£¡ +11 ˲ϢÓîÖæ 2026-02-16 12/600 2026-02-21 21:14 by lq493392203
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û