c语言实现类似python中list(元素类型为char)的切片操作

觉得python语言的list的切片操作很方便,用c语言实现一个简单版本的.

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
/*  实现类似python中list(元素类型为char)的切片操作 
*
*	test="abcdef" 
*	slice(test,1,4,1)  返回:"bcd" 
*	slice(test,-1,3,-1) 返回:"ef"
*	slice(test,0,5,2)  返回:"ace" 
*
*/

//获取src字符串从left到right索引(不包含right索引处)的子字符串 
char* slice(char* src,int left,int right,int step){
	//把所有的负号索引全部转换为正号索引
	int len=strlen(src);
	if(left<0)
		left=len+left;
	if(right<0)
		right=len+right;
		 
	if(step<0){//从右往左 不包含right索引 
	 //满足 :left > right 
     //从right索引遍历到left索引-1处,步长为step的绝对值
     	if(left>right){
     		char* dest=(char*)malloc( (left-right) / (-step) +1);
     		int i=right+1,k=0;
     		while(i<=left){
			 	dest[k]=src[i];
				i+=-step;
				k++;
			}
			dest[k]='\0';
			return dest;
		}else{
			return NULL;
		}
	}else if(step>0){//从左往右 不包含right索引 
	 //满足 :left < right
	 //从left遍历到right-1处,步长为step的绝对值	
     	if(left<right){
     		char* dest=(char*)malloc( (right-left) / step +1);
     		int i=left,k=0;
     		while(i<right){
			 	dest[k]=src[i];
				i+=step;
				k++;
			}
			dest[k]='\0';
			return dest;
		}else{
			return NULL;
		}
	}else{
		return NULL; 
	} 
}

int main(void){
    char* test="abcdef";
    char* dest=slice(test,1,4,1);
    printf("%s\n",dest);
    dest=slice(test,-1,3,-1);
    printf("%s\n",dest);
    dest=slice(test,0,5,2);
    printf("%s\n",dest);
    dest=slice(test,1,5,-1);
    printf("异常,所以返回地址为NULL:%p\n",dest);
} 

执行结果正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值