字符串逆序(递归实现和非递归)
将参数字符串中的字符反向排列,不是逆序打印。
例如:“abcdef”
逆序之后:“fedcba”
递归实现:
#include <stdio.h>
void reverse_string(char* arr)//指针接收首元素地址
{
int len = strlen(arr);//计算字符串长度
char tmp = *arr;//把字符串首元素放到tmp字符变量里
*arr = *(arr + len - 1);//把字符串最后一个元素放到首元素地址里
*(arr + len - 1) = '\0';//再把\0放进字符串末尾元素地址里
if (strlen(arr)>=2)//字符串长度如果是大于等于2才有必要交换
{
reverse_string(arr + 1);//首元素地址+1
}
*(arr + len - 1) = tmp;//把tmp里的值放到字符串末尾元素里
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);//创建逆序函数,arr是数组数组名是首元素地址
printf("%s\n", arr);
return 0;
}
非递归实现:
void reverse_string(char* arr)
{
char left = 0;
char right = strlen(arr)-1;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}