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

来源:互联网 发布:js字符串match的用法 编辑:程序博客网 时间:2024/05/29 19:30

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

    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;}