今天分享一道题目
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
char arr[]="abcdef";
将上面的代码变成fedcba
我们首先用非递归的方法试一试
思路
size_t my_strlen(char* str)
{
if ('\0' == *str)
return 0;
else
return 1 + my_strlen(1 + str);
}
void reverse_string(char s[])
{
size_t len = my_strlen(s);
size_t left = 0;
size_t right = len - 1;
while (left<right)
{
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s", arr);
return 0;
}
上面就是用我们普通的方法,现在我们用递归的方式写下我们的代码
size_t my_strlen(char* str)
{
if ('\0' == *str)
return 0;
else
return 1 + my_strlen(1 + str);
}
void reverse_string(char* arr)
{
size_t len = my_strlen(arr);
char tmp = arr[0];
arr[0] = arr[len - 1];
arr[len - 1] = '\0';
if (my_strlen(arr) >= 2)
reverse_string(arr + 1);
arr[len - 1] = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s", arr);
return 0;
}
这就是我们的今天的每日一题,主要是分享递归的思路