C 字符串操作

刚开始学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);
	
	
	
	
	
	
	
	
}















1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值