C语言中的数组修改
不知道我做错了什么。我试着将char数组的元素循环移位1。这似乎有效,但并不持久。我假设这是指针问题,但我仍然不知道指针是如何工作的,所以我不确定从哪里开始。问题是,它似乎只改变for循环内的值,然后重置C语言中的数组修改,c,arrays,C,Arrays,不知道我做错了什么。我试着将char数组的元素循环移位1。这似乎有效,但并不持久。我假设这是指针问题,但我仍然不知道指针是如何工作的,所以我不确定从哪里开始。问题是,它似乎只改变for循环内的值,然后重置 #include <stdio.h> #include <stdlib.h> #include <string.h> void ip(); int main(){ char d[10] = "010"; char k[10] = "101
#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");
}
#包括
#包括
#包括
无效ip();
int main(){
字符d[10]=“010”;
字符k[10]=“1010000010”;
初始置换(d,k);
返回(0);
}
无效ip(字符*数据,字符*键){
int i;
//P10(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6)
字符P10[10]={键[2],键[4],键[1],键[6],键[3],键[9],键[0],键[8],键[7],键[6]};
//将P10分成两段
charleft5[5]={P10[0],P10[1],P10[2],P10[3],P10[4]};
char right5[5]={P10[5],P10[6],P10[7],P10[8],P10[9]};
//移位前二进制字符串
printf(“班前:”);
对于(i=0;i您的循环没有移动值,而是将数组反转两次。
它将索引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;
chartmp=left5[0];
对于(i=1;i
如果实际将数组声明为一个太大的元素,则可以编写:
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];
}
charleft5[6]={P10[0],P10[1],P10[2],P10[3],P10[4]};
left5[5]=left5[0]
对于(i=0;i<5;++i){
left5[i]=left5[i+1];
}
“1010000010”
如果计算空终止符,则该字符串有11个字符,因此在初始化字符k[10]
时字符串不会以空终止。这就是问题所在。谢谢