在数组中移动字符串位置

时间:2013-06-19 12:51:35

标签: c arrays

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

如果a = 1

1 2 0 0 0 0

如果a = 2

0 0 1 2 0 0

如果a = 3

0 0 0 0 1 2

到目前为止,我还没有代码,只是想要一些想法。

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:0)

我正在加入这个问题 - 这是转变还是轮换?如果移位你应该从最后到开始运行数组复制与当前位置差异的单元格。 类似的东西:

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

如果它是圆形的,你应该找到一种更新所需位置的方法,例如,如果i-a小于0,那么N-a或类似的东西。