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