刚开始学C++ 手打一个JAVA split方法
刚开始的想法是用strtok 但是发现它不分 “a” 和"aa" 甚至"ab" 都混在一起 好像单字符比较用。
没办法 只能用strstr 方法
写了两个函数 第一个返回 字符串数量 第二个返回字符串数组
初学可能有bug 仅供参考 以后自己使用时发现问题也会再调 有意多使用* 而减少 使用[ ] 目的在于练习
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int strCount(char* str,char* reg){
if(str==NULL||reg==NULL){
return 0;
}
char* p;
int i=0;
p=strstr(str,reg);
while(p!=NULL){
p+=strlen(reg);
i++;
p=strstr(p,reg);
}
return i;
}
int cSplit(char*** q,char* str,char* reg){
if(str==NULL||reg==NULL||q==NULL){
return 0;
}
int count =strCount(str,reg)+1;
if(count<=1){
return 0;
}
char** w=(char**)malloc(sizeof(char*)*count);
char* p;
int i=0;
int len0=strlen(str);
*w=(char*)malloc(sizeof(char)*(strlen(str)+1));
memcpy(*w,str,sizeof(char)*(strlen(str)+1));
p=strstr(str,reg);
while(p!=NULL){
int len1=strlen(p);
int lenCha=len0-len1;
//printf("%d\n",lenCha);
// if(lenCha<=0){
// free(*(w+i));
// *(w+i)=NULL;
// }else{
// //printf("else=%s\n",*(w+i));
// }
*(*(w+i)+lenCha)='\0';//看来还是不是能直接赋值0 要赋值‘\0’;
//printf("else=%s------\n",*(w+i));
p+=strlen(reg);
//printf("p=%s\n",p);
*(w+i+1)=(char*)malloc(sizeof(char)*(strlen(p)+1));
memcpy(*(w+i+1),p,sizeof(char)*(strlen(p)+1));
//printf("w=%s\n",p);
len0=strlen(p);
i++;
p=strstr(p,reg);
}
*q=w;
//printf("last=%s--------\n",*(w+count-1));
return count;
}
void main(){
//char* abc="abc abc abcabcdsdfdbsabcgabc abcsabc dfsdabc abc";
char* abc="abcfgjabc abcghjghjabc";
char* gh1="abcfgjabc abcghjghjabc";
char* gh2="fgj_abc abcgh_jabcabc__ghj";
char* v="abc";
char* v1="__";
char* v2="_";
char** q;
char** q1;
char** q2;
char** q3;
int n=cSplit(&q,abc,v);
int n1=cSplit(&q1,gh1,v1);
int n2=cSplit(&q2,gh2,v2);
int n3=cSplit(&q3,gh2,v1);
for(int i=0;i<n;i++){
printf("p=%s;\n",*(q+i));
}
for(int i=0;i<n1;i++){
printf("p1=%s;\n",*(q1+i));
}
for(int i=0;i<n2;i++){
printf("p2=%s;\n",*(q2+i));
}
for(int i=0;i<n3;i++){
printf("p3=%s;\n",*(q3+i));
}
// printf("i=%d\n",i);
// int len1=strlen(abc);
// int len2=strlen(v);
// printf("%d%d\n",len1,len2);
// char* p;
// int i=0;
// p=strstr(abc,v);
// printf("%s\n",p);
// while(p!=NULL){
// int klen=strlen(p);
// int relen=len1-1klen;
// if(relen<=0){
// NULL;
// }else{
// memcpy(buff,abc,sizeof(abc));
// *(buff+relen)=0
// }
// printf("%d\n",klen);
// p+=strlen(v);
// printf("%s\n",p);
// i++;
// p=strstr(p,v);
// printf("%s\n",p);
// }
// printf("%d\n",i);
// printf("%s\n",abc);
// printf("%s\n",v);
}