实现指定步长循环后移字符串数组算法

   字符串数组  aaa[] ={'a','b','c','d','e','f','g',''};  实现循环移动;   估计大家都会想到环形结构;对头,就是利用环形思路实现移动算法;

    1. 利用环形越界处理方式

                   (iCurRPo+iStep) % iLen 

            求得移动下一位置

    2. 循环何时结束?   移动到的位置的字符为下一个被移动的字符 , 依次类推无重复移动,只需要循环字符长度次即可

    3. 针对循环到初始位置的处理;   循环一圈可能又回原有位置,这次需要从原有位置的下一位置开始循环处理,依次类推;

   以下为测试通过的代码;也希望大家能留下更高效简洁的实现方式。

/*
 @pStr 指向数组的执政
 @iStep 循环移动的步调
 @实现按指定间隔向后循环移动字符数组中的字符;  环形实现思路;
*/
char* LoopMove(char *pStr,int iStep)
{
	int iLen = strlen(pStr);
	int iCurPos = 0 , iNextPos=0 , iLoop =0 ,iLoopBeg= 0;
	char p,q;
	p = q = pStr[iCurPos];

	while(iLoop < iLen )
	{
		iNextPos = (iCurPos+iStep) % iLen;
		if(iLoopBeg == iNextPos)
		{	////闭环移动一圈
			pStr[iNextPos] = p;
			iCurPos = ++iLoopBeg;
			p = pStr[iCurPos];
		}
		else 
		{
			q = pStr[iNextPos];
			pStr[iNextPos] = p;
			p = q;
			iCurPos = iNextPos;
		}
		++iLoop;

	}
	return pStr;
}
原文地址:https://www.cnblogs.com/pangblog/p/3367671.html