能力值:
( LV4,RANK:50 )
|
-
-
2 楼
如果没有什么特殊原因,随便找个正则表达式库就解决了.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
bootst有很好的正则库
|
能力值:
( LV13,RANK:530 )
|
-
-
4 楼
ATL的正则库 也可以讲究用 虽然俺喜欢NET的
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
Wild card Match
网上搜下,写出来很简单
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
考虑到匹配效率和使用方便的话,正则表达式并不是最适合得
|
能力值:
( LV13,RANK:410 )
|
-
-
7 楼
状态机~~~~
|
能力值:
( LV6,RANK:90 )
|
-
-
8 楼
谢谢大家了。
其实这个程序是不允许用库的,后来我仔细想了一下还是便出来了,在这贴出来让大家看下,大家有兴趣可以参考下,
#include<stdio.h>
#include<string.h>
/*seach为配匹函数,在source窜中搜索dest窜,其中ptr存储第一次匹配的位置,n为紫窜长*/
int seach(char *source ,char *dest, char **ptr,int n)
{
int i,flag;
for(;*(source+n-1);source++)
{
for(i = 0,flag = 1; i < n; i++)
{
if(*(source+i) != *(dest+i))
{
flag=0;
break;
}
}
if(flag)
{
*ptr = source+i;
return 1;
}
}
return 0;
}
/*match函数判定两个窜是否匹配,其思想是这样的,不断将两个*之间的字符赋值给一个临时字*//符窜数组,然后调用 seach函数找出temp 在第二个窜中第一次出现的位置。
int match(char *pat, char *str )
{
int i,len;
char temp[10];
char *ptr,*p;
for(p = pat,i = 0; *p != '\0'; p++)
{
if(*p == '*')
{
if(i==0)
continue;
else if(!seach(str,temp,&ptr,i))
return 0;
str=ptr;
i=0;
}
else
{
temp[i] = *p;
i++;
}
}
for(int j=0; j < i; j++) //此处对最后一个*号后的部分进行处理
{
len=strlen(str);
if(*(str+len-j-1)!=temp[i-j-1])
return 0;
}
return 1;
}
void main()
{
char a[30],b[50];
int yesno;
gets(a);
gets(b);
yesno=match(a,b);
printf("%s %s %s\n",a,yesno?"match":"unmatch",b);
}
人太懒,加上程序流程也比较简单,不想打字了,呵呵。
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
楼主是美女哟
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
没有看懂是怎么回事还,吃饭回来了再学习!
|
|
|