字符串数组 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;
}