实现程序如下
//这里需要两个参数,数组的地址和数组的大小,可以通过以下代码求得
int main{
int reverse_string2();
char arr[] = "abcdef"; //默认,可自由修改
int len = 0;
while (arr[len] != '\0') {
len++;
}
reverse_string2(arr, len);//调用
//打印实现
printf("###################################################\n");
printf("%s\n", arr);
printf("###################################################\n");
}
int reverse_string2(char string[], int len) { //递归
static int left = -1; //使第一次左移为0;
//static的作用是让每次left不会再次被初始化为-1;
//而且在第后续递归中也可继续使用,保持left左移
//特别要注意这里left在递归的“递”过程中被改变
//“归”时已经变了,所以要在递归之前交换变量
int right = len - 1;
left++; //保持left每次递归左移
if (left < right) { //我的思路是,先交换头和尾,依次到中间
string[left] = string[left] ^ string[right]; //这三行相当于交换两个数
string[right] = string[left] ^ string[right];//
string[left] = string[left] ^ string[right];// 三行到这
reverse_string2(string, len-1 );
}
return 0;
}
int reverse_string(char string[],int len) { //迭代
int left = 0;
int right = len-1;
while (left < right) {
string[left] = string[left] ^ string[right];
string[right] = string[left] ^ string[right];
string[left] = string[left] ^ string[right];
right--;
left++;
}
return 0;
}```