编写一个函数 reverse_string(char* string)(递归实现)
实现:将参数字符串中的字符反向排列
要求:不能使用C函数库中的字符串操作函数。
方法一: 逆序打印,通过递归找到'\0'前一个字符,然后依次从后往前打印字符
void reverse_string(char* string)
{
if (*string != '\0')//当指针string指向'\0'时,不再递归
{
string++;
reverse_string(string);
printf("%c", *(string - 1));
}
}
int main()
{
char* arr = "abcdefgh";
reverse_string(arr);
return 0;
}
hgfedcba
方法二: 将字符串反向排列好后,再整体打印字符串
#include <stdio.h>
#include <assert.h>
//不能使用字符串的库函数,自定义函数求字符串长度
int my_strlen(const char* str)
{
assert(str);//断言函数,防止参数是空指针,保证了指针的时效性
int number = 0;
while (*str++)//当指针str指向'\0'时,跳出循环
{
number++;
}
return number;
}
void reverse_string(char* str)
{
assert(str != NULL);//断言函数,防止参数是空指针,保证了指针的时效性
int len = my_strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (my_strlen(str + 1) > 1)//字符交换一次后,判断剩下的字符串长度
{
reverse_string(str + 1);
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdefgh";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
hgfedcba