用C谁如何求"sd1xingNOtouse 2012/7/312 abceOKtouse 2012/7/31"这符串中夹在"xing"跟"touse"的"NO"
而且还要先定义char a="xing" b="touse",然后返回NO
如果是定义 char a="abce" b="touse", 那就返回OK
如果定义 char a="sdf" b="aaaaa"那就返回空
sscanf等办法都有内存溢出漏洞, 所以最好不要用sscanf
字符串很长的话,也可以行得通
求高手帮帮忙,能用正则那就最好啦
[解决办法]
老实说,对正则并不是很感冒。
其一,虽说正则是用神经网络实现的,在下自己也查过一点神经网络的相关资料(数模竞赛那会),但在下实在理不清正则和神经网络之间的联系(也可能只是没有想到关键点而已),也就无从分析它的效率优劣。
其二,感觉正则把很多基本的分析过程给架空了。一味用正则对基本分析能力的训练不利(赶项目时另当别论)。
#include<stdio.h>#include<string.h>#include<malloc.h>int indexOf(const char*,const char*);char *substring(const char*,int,int);int main(){ char *target="sd1xingNOtouse 2012/7/312 abceOKtouse 2012/7/31",*tmp; char *a[]={"xing","abce","sdf"},*b[]={"touse","touse","aaaaa"}; int st,len; register int i; for(i=0;i<3;i++) if((st=indexOf(target,a[i]))>=0) { st+=strlen(a[i]); tmp=target+st; if((len=indexOf(tmp,b[i]))>0) printf("%s\n",substring(target,st,len)); else printf("\n"); } else printf("\n"); return(0);}int indexOf(const char *str,const char *dest){ char *s,*d; register int i; int flag; for(i=0;*str;i++,str++) if(*str==*dest) { for(s=str,d=dest,flag=1;*d;s++,d++) if(*s!=*d) { flag=0; break; } if(flag) return(i); } return(-1);}char *substring(const char *str,int start,int len){ register int i=0; char *tmp; if(len<1||start<0||start>strlen(str)) return(NULL); tmp=(char*)malloc((len+1)*sizeof(char)); for(i=0,str+=start;i<len&&*str;i++) tmp[i]=*str++; tmp[i]=0; return(tmp);}