C中的数组修改

时间:2014-02-09 22:07:29

标签: c arrays

不确定我在这里做错了什么。我试图循环移动一个char数组的元素。它似乎有效,但不会持久。我认为这是一个指针问题,但我仍然没有得到指针如何工作,所以我不知道从哪里开始。问题是,它似乎只是改变for循环内部的值并在之后重置。

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

void ip();

int main(){
    char d[10] = "010";
    char k[10] = "1010000010";
    initialPermutation(d, k);
    return(0);
}

void ip(char * data, char* key){
    int i;

    // P10(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10) = (k3, k5, k2, k7, k4, k10, k1, k9, k8, k6)
    char P10[10] = {key[2],key[4],key[1],key[6],key[3],key[9],key[0],key[8],key[7],key[6]};

    // split P10 into two segments
    char left5[5] = {P10[0],P10[1],P10[2],P10[3],P10[4]};
    char right5[5] = {P10[5],P10[6],P10[7],P10[8],P10[9]};

    // pre shift binary string
    printf("Pre-shift: ");
    for(i=0;i<5;i++)
        printf("%c",left5[i]);
    for(i=0;i<5;i++)
        printf("%c",right5[i]);
    printf("\n");

    // circular shift left one bit (here is where the problem is)
    for(i=0;i<5;i++){
        char templ = left5[4-i];    
        left5[4-i] = left5[i];   
        left5[i] = templ;

        char tempr = right5[4-i];
        right5[4-i] = right5[i];
        right5[i] = tempr;
     }



    printf("Post- (outside for loop): ");

    for(i=0;i<5;i++)
        printf("%c",left5[i]);
    for(i=0;i<5;i++)
        printf("%c",right5[i]);
    printf("\n");
}

1 个答案:

答案 0 :(得分:1)

你的循环没有移动值,它将数组反转两次。 它将索引0与索引4交换,然后将1与3交换,然后将2与2交换,然后将3与1交换,最后4与0交换。此时阵列与启动时完全相同。

此代码执行实际旋转左移:

char tmp = left5[0];
for(i = 1; i < sizeof(left5); ++i){
    left5[i-1] = left5[i]
}
left5[4] = tmp;

如果你实际上声明了一个元素太大的数组,你可以写:

char left5[6] = {P10[0],P10[1],P10[2],P10[3],P10[4]};
left5[5] = left5[0]
for(i=0; i < 5; ++i){
    left5[i] = left5[i+1];
}