-1

我想问你是否知道如何在数组中移动字符串位置。我想实现这样的东西。

如果 a=1

1 2 0 0 0 0

如果 a=2

0 0 1 2 0 0

如果 a=3

0 0 0 0 1 2

直到现在我还没有代码,我只是想要一些想法。

4

2 回答 2

1
#include <stdio.h>
#include <string.h>

/*
void rotate_right(char *str, size_t n){
    size_t len = strlen(str);
    char temp[n %= len];
    memcpy(temp, str + len - n, n);
    memmove(str + n, str, len - n);
    memcpy(str, temp, n);
}
*/

void rotate_right1(char *str){
    size_t len = strlen(str);
    char temp = str[len-1];
    memmove(str + 1, str, len - 1);
    str[0] = temp;
}

void rotate_right(char *str, size_t n){
    while(n--)
        rotate_right1(str);
}

int main(void){
    char data[] = "120000";
    char wk[sizeof(data)];
    int a;
    for(a=1;a<=3;++a){
        strcpy(wk, data);
        rotate_right(wk, 2*(a-1));
        printf("%s\n", wk);
    }
    return 0;

}
于 2013-06-19T13:35:30.527 回答
0

我加入了这个问题——这是轮班还是轮换?如果换档,您应该从末尾运行数组到开头复制与当前位置相差 a 的单元格。就像是:

for (i=N;i>=a;i--)
{
array[i]=array[i-a];
}

如果它是圆形的,您应该找到一种方法来更新所需的位置,例如如果 ia 小于 0 然后 Na 或类似的东西。

于 2013-06-19T13:15:44.203 回答