当初想了半天没想出来。。(脑子太笨了。。。。T.T)
回家仔细考虑了下。 实现如下:
追加解题思路。
右移n位表示有n位数字要移动到的位置要超过字符串长度。程序中count用来表示已经有多少位 移动超过长度了。
然后,head的值每次和被移动后的位置的值进行交换,反复执行,知道交换的位置又回到head
如果count没有达到n,那么head值+1, 继续执行。(主要是偶数位的字符串移动偶数位的时候。)
void
move_string(char *msg, int steps)
{
int len;
int pos;
int head;
char tmp;
int count;
if(msg == NULL)return;
len = strlen(msg);
steps = steps % len;
head = 0;
count = 0;
while(1){
tmp = msg[head];
if(pos + steps >= len){
count++;
}
pos = (pos + steps) % len;
// back to head do next loop.
if(pos == head){
if(count == steps){
break;
}
head++;
pos = head;
continue;
}
msg[head] = msg[pos];
msg[pos] = tmp;
}
printf("the result : %s\n", msg);
}