例如:原来是”abcdefghi”,如果n = 2,移位后应该是”hiabcdefg”。
思路:当读到这个题目的时候,没有编写过类似程序的人可能会想,程序的实现就是依照字符的循环右移这样实现的,但仔细想会发现这样很难实现,不妨换一种思路,我们先把需要移到前面的字符取出来放进一个新的字符数组,接着再把前面的没有移动的部分插到新字符数组的尾部,加上字符串结束标志‘\0’,这样就形成了一个符合要求的新的字符数组,把它输出来就可以了.
解析:本题提供了两种方法。
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1024
void LoopMove_1(char *pStr, int steps)
{
int len = strlen(pStr) - steps;
char temp[MAX_LEN];
strcpy(temp, pStr + len);
strcpy(temp + steps, pStr);
*(temp + steps + len) = '\0';
strcpy(pStr, temp);
}
void LoopMove_2(char *pStr, int steps)
{
int len = strlen(pStr) - steps;
char temp[MAX_LEN];
memcpy(temp, pStr + len, steps);
memcpy(temp + steps, pStr, len);
memcpy(pStr, temp, len + steps);
}
int main(void)
{
char str1[] = "abcdefghi";
LoopMove_1(str1, 3);
printf("%s\n", str1);
char str2[] = "gklmnopqrst";
LoopMove_2(str2, 3);
printf("%s\n", str2);
return 0;
}