思路:
给定一个字符串“abcdefghi”,右移一位则是先把最后一位的i保留起来,然后其他位按位从右向左依次往右挪一位,留下最开始那一位放入i即可。
这里就需要一个tmp来保存i,要找到i,也需要知道字符串长度len,用strlen来计算len找到i,然后其余元素依次右移,再把之前保留的i放入最开始位置。这样就是右移一轮,外部加一个for循环,即可完成。
代码:
#include <stdio.h>
#include <stdlib.h>#include <assert.h>
#include <string.h>
void RightLoopMove(char *pstr, unsigned short steps)
{
int len = 0;//首先要把最后的那个元素保留下来,需要知道数组长度方便找到最后一个元素
char tmp = 0;
assert(pstr != NULL);
len = strlen(pstr);
int i = 0;//元素向右移动采用循环
int j = 0;//做循环需要
for (j = 0; j < steps; j++)
{
tmp = *(pstr + len - 1);//pstr是起始位置,加len减1,解引用得到最后一个元素
for (i = 0; i < len - 1; i++)//把倒数第二个移到倒数第一个,倒数第三个移到倒数第二个,循环...
{
*(pstr + len - 1 - i) = *(pstr + len - 2 - i);
}
*pstr = tmp;//把保留的最后一个元素放到开始位置
}
}
int main()
{
char arr[] = "abcdefghi";//因为一直在变化,所以设置一个数组,常量字符串不能改
RightLoopMove(arr, 3);
printf("%s\n", arr);
system("pause");
return 0;
}