代码改变世界

字符串移位

2009-10-08 21:15  Iron  阅读(254)  评论(0编辑  收藏  举报

思路:

对于"abcdef",如果右移两位,则先将"abcd"反向为"dcba",然后将"ef"反向为"fe",然后再最后整个字符串反向一次,变成"efabcd"

程序代码如下:

#include <cstdio>
#include <cassert>
#include <cstring>
void Reverse(char *str, int start,int end)
{
 assert(str!=NULL);
 //反序
 char* strs = str+start;
 char* stre = str+end;
 for (;strs<stre;)
 {
  char temp = *strs;
  *strs = *stre;
  *stre = temp;
  strs++;stre--;
 }
}
void MoveRight(char *str, int n)
{
 assert(str!=NULL);
 int t = n%strlen(str);
 //反序
 Reverse(str,0,strlen(str)-t-1);
 Reverse(str,strlen(str)-t,strlen(str)-1);
 Reverse(str,0,strlen(str)-1);
}

int main()
{
 char str[] = "abcdefghi";
 MoveRight(str,10);
 printf(str);
}