- //num指定-1表示全部处理,指定大于0的数字表示只处理前num段,剩余字段放在返回数组的第num段,返回段数也是放在num中
- bool DivStrByStr(char* str,const char* mark,int& num, intptr_t * result) //result[*][size]
- {
- int needNum=num;
- int l=strlen(mark);
- int status=0;
- int nmark=0;
- num=1;
- int i=0;
- int base=0;
- *result=(intptr_t)&str[0];
- if(!needNum)
- {
- return 1;
- }
- for(i;str[i];++i)
- {
- switch(status)
- {
- case 0:
- if(str[i]==mark[nmark])
- {
- ++nmark;
- status=1;
- base=i;
- }
- break;
- case 1:
- if(nmark<l)
- {
- if(str[i+1]==0&&nmark>=l-1)
- {
- *(str+base)=0;
- status=0;
- nmark=0;
- break;
- }
- else if(str[i]!=mark[nmark])
- {
- status=0;
- nmark=0;
- }
- else
- {
- ++nmark;
- }
- }
- else
- {
- *(str+base)=0;
- nmark=0;
- *(result+(num++))=(intptr_t)&str[i];
- if(needNum!=-1&&num>needNum)
- {
- return num;
- }
- if(str[i]==mark[nmark])
- {
- ++nmark;
- status=1;
- base=i;
- }
- status=0;
- }
- break;
- }
- }
- if(nmark>=l)
- {
- str[i-1]=0;
- }
- return num;
- }
- //该片段来自于http://www.codesnippet.cn/detail/160520133406.html
来源: http://www.codesnippet.cn/detail/160520133406.html