请教一个字符串匹配算法

来源:百度知道 编辑:UC知道 时间:2024/09/21 19:45:26
如有一个模板字符串如AAABBBCDB,现有几个数字字符串,111333253,444222132,000999759,如何检查能确定这几个数字字符串都匹配于AAABBBCD这个模板字符串??
谢谢你的回答,不过我还是补充一下吧。这个字符串模板(或者可以说是字符串过滤规则)不是固定的,用户可以随便制定自己的多个模板。下面有大量的数字字符串,用户可以通过制定自己的字符串模板把符合自己要求的数字字符串提取出来。(字符串模板可以是AAB,ABCBA,ABBCC,ABAAAA,ABCBACB,ABCDDDD...想怎么制定就怎么制定)

int match(char* templ , char* str)
{
char co[265] = {0};
int len = strlen(templ);
int i;
if ( strlen(str) != len) return 0;
for (i=0; i<len; ++i)
{
if (co[templ[i]] == 0) co[templ[i]] = str[i];
else if (co[templ[i]] != str[i]) return 0;
}
return 1;
}

第一个参数是模板, 第二个参数是要判断的字符串。 这里模板里不同的字母是可以对应相同的字符的, 要是不允许的话还需要再判断一下

方法:令模板字符串为T[0..N-1],数字字符串为A[0..M-1]。

若N不等于M,返回:匹配失败

否则,
复制数字串A为a,
对T的每一个字符,将对应位置的字母拷贝到a的相应位置

若a与T相同,返回:匹配成功
否则,返回:匹配失败。

可以使用正则表达式,不知道您是使用哪种语言,只要百度一下就知道了。其实也可以自己写匹配这个模式的字符串,先找四个连续相同的A再找三个连续相同的B,找一个与之前都不同的字符C,找一个与之前都不同的字符D,最后找第二个字符B就行了。