从一个数组里面获取相邻的数字。显示为1,3-5,10-20

// Getnext.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

typedef struct  
{
	unsigned long ulStart;
	unsigned long ulEnd;
	unsigned long ulIdx;
}TT_NextData;

unsigned long TT_GetNextData(unsigned long *pulData, unsigned long ulNum, TT_NextData stCurPara, TT_NextData *pstNextPara)
{
	unsigned long ulLoop;
	unsigned long startIdx;
	unsigned long ulStart;
	unsigned long ulEnd;
	unsigned long ulCurIdx = 0xffffffff;

	if (stCurPara.ulIdx == 0xffffffff)
	{
		startIdx = 0;
	}
	else
	{
		startIdx = stCurPara.ulIdx + 1;
	}

	for (ulLoop = startIdx; ulLoop < ulNum; ulLoop++)
	{
		if (ulLoop == startIdx)
		{
			ulStart = pulData[ulLoop];
			ulEnd   = pulData[ulLoop];
			ulCurIdx= ulLoop;
			continue;
		}

		if (pulData[ulLoop] == (ulEnd + 1))
		{
			ulStart = ulStart;
			ulEnd   = pulData[ulLoop];
			ulCurIdx= ulLoop;
			continue;
		}

		break;
	}

	if (ulCurIdx == 0xffffffff)
	{
		return 1;
	}

	pstNextPara->ulStart = ulStart;
	pstNextPara->ulEnd   = ulEnd;
	pstNextPara->ulIdx = ulCurIdx;
	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned long aulData[] = {1, 2, 3, 4,5, 6, 7, 8 , 9, 10,11,12, 13, 14, 18, 19, 20};
	TT_NextData stNext;
	stNext.ulIdx = 0xffffffff;

	while (0 == TT_GetNextData(aulData, sizeof(aulData)/sizeof(aulData[0]), stNext, &stNext))
	{
		printf("\r\n %u-%u", stNext.ulStart, stNext.ulEnd);
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值