读书人

用C哪位高手怎么求quot;sd1xingNOtouse 20

发布时间: 2012-09-15 19:09:28 作者: rapoo

用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
字符串很长的话,也可以行得通
求高手帮帮忙,能用正则那就最好啦

[解决办法]
老实说,对正则并不是很感冒。
其一,虽说正则是用神经网络实现的,在下自己也查过一点神经网络的相关资料(数模竞赛那会),但在下实在理不清正则和神经网络之间的联系(也可能只是没有想到关键点而已),也就无从分析它的效率优劣。
其二,感觉正则把很多基本的分析过程给架空了。一味用正则对基本分析能力的训练不利(赶项目时另当别论)。

C/C++ code
#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);} 

读书人网 >C语言

热点推荐