字符串子集查找

字符串子集查找

查询字符串中是否存在子集,如果字符串存储在一段缓存区里面,需要查询的子字符串可能是在首尾相连的地方:
例如接受到的数据在存储满了缓存区又从头开始保存,保存到index=3:
在这里插入图片描述
需要查找的子字符串为ABCDEF:

int buf_index; // 表示最后一个数据存放在缓存区第几个位置

// target字符串是否存是buf的子字符串,返回值是子串所在位置,
// 返回-1:不存在     
// 返回0....n:字符串首字符的下标
int myStrstr(char *buf,char *target)
{
	int i,j,buf_len,target_len;
	buf_len =  strlen(buf);
	target_len = strlen(target);
	
	for(i=0; i<=buf_len-target_len; i++)
	{
		for(j=0;j<target_len;j++)
		{
			if(buf[i+j]!=target[j])  
			{
				break; 
			}
		}
		if(j==target_len)  
		{
			return i;
		}
	}
	return -1;
}

// 表示最后一个数据存放在缓存区的哪个位置
// 返回-1:不存在  否则就是存在   
int checkStr(char *buf,char *target)
{
	int i;
	int buf_len = strlen(buf);  
	int target_len = strlen(target); 
	char temp[255] = {0};		
	// 没有出现缓存区头尾相连
	if(target_len <= buf_index)   
	{
		printf("---%s   %s \n",buf,target);
		
		return myStrstr(buf, target);
	}
	else   // 可能出现缓存区头尾相连接
	{
		memcpy(temp+target_len,buf,target_len);
		memcpy(temp,buf+buf_len-target_len,target_len);
		printf("===%s\n",temp);
		return myStrstr(temp,target);
	}
	return -1;
}


void main(void)
{
	char *buf="DEF4567890qwertyuABC";
	char *target = "ABCDEF";
	buf_index = 3; 	// 缓存区循环一次从头开始又存了3个,最后一个子集放在第3个位置
	printf("%d",checkStr(buf,target));
	
	//如果确定要找的数据没有在首尾位置
	/*
	char *buf="123ABCDEF4567890";
	char *target = "ABCDEF";
	buf_index = strlen(buf);	// 这个一般是由数据接收时统计,这里测试就直接这么写
	printf("%d",checkStr(buf,target)); // 也可以直接调用myStrstr()

	*/
	while(1)
	{
			;
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xflySnail

码字不易,鼓励鼓励...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值