24小时热门版块排行榜    

查看: 1864  |  回复: 16
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

460104898

铜虫 (正式写手)

[交流] 一个华为编程大赛题 已有3人参与

判断包含通配符的匹配字符串是否完全匹配输入的字符串。
匹配字符串中包含的通配符仅有“*”和“?”,且通配符不会
连续出现。(要求完全匹配而不是包含)

蛮有意思的,大家可以编编。。
回复此楼
已阅   回复此楼   关注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的回帖
查看全部 17 个回答

微尘、梦想

木虫 (知名作家)


小木虫(金币+0.5):给个红包,谢谢回帖
看得不太懂,是不是匹配字符串是已知的,然后看看手工输入的字符串是不是和它一样啊?
任风云变幻,我笑对人生!
2楼2011-05-29 18:10:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

460104898

铜虫 (正式写手)

引用回帖:
Originally posted by 微尘、梦想 at 2011-05-29 18:10:26:
看得不太懂,是不是匹配字符串是已知的,然后看看手工输入的字符串是不是和它一样啊?

恩 。
只是输入的字符串可以有通配符。
3楼2011-05-29 18:42:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

微尘、梦想

木虫 (知名作家)


小木虫(金币+0.5):给个红包,谢谢回帖
CODE:
#include
void main(void)
{
        char *p="l*l?l?l*";
        char a[10];
        gets(a);
        if(strcmp(p,a)==0)
                printf("完全匹配!\n");
        else printf("不完全匹配!\n");

}

不知道是不是这个意思?如果仅仅是这样的话,好像没什么呀!
任风云变幻,我笑对人生!
4楼2011-05-29 18:59:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见