2014-02-09 62 views
0

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

#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"); 
} 
+0

'“1010000010”'有11个字符,如果计数null终止符,所以字符串在'char k [10]' – ouah

回答

1

您的循环不会移位值,它会颠倒数组两次。 它使用索引4替换索引0,然后使用3替换1,然后使用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]; 
} 
+0

初始化中不是空终止的。这就是问题所在。谢谢 – cHam