将字符串逆序
例如:abcdef 经过逆序之后得到 fedcba
(1)正常情况下 --------------- 分析:
可以将第一个元素与最后一个元素进行交换,第二个与倒数第二个交换…类推
void reverse_string(char arr[])
{
int left = 0;
int right = strlen(arr) - 1;
while (left < right) {
char tem = arr[left];
arr[left] = arr[right];
arr[right] = tem;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
测试:
(2)若采用递归形式:
abcdef ----------> 可以先将 a 与 f 进行交换,然后重复调用逆置函数将中间部分 bcde 进行逆置
void reverse_string(char arr[])
{
char tmp = arr[0]; //记录第一个元素
int len = strlen(arr);
arr[0] = arr[len - 1]; //先交换首尾
arr[len - 1] = '\0';
if (strlen(arr + 1) > 1) //中间剩余需逆置元素个数 > 1 时需递归调用逆置函数
reverse_string(arr + 1);
arr[len - 1] = tmp;
}
测试: