题目
题目描述:
编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列,不是逆序打印。要求:不能使用C函数库中的字符串操作函数。
思路(递归)
a b c d e f 把首位字符保存在tmp中
f b c d e \0 把最后一个字符置为'\0' 再 *(str+1)
b c d e 相当于新数组
e c d \0 *(str+1)
c d
....
return时再逐一把每个数组尾位置为tmp
代码
非递归
#include <stdio.h>
//自己实现strlen函数
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
void reverse_string1(char *str)
{
int left = 0;
int right = my_strlen(str)-1;
while(left<right)
{
char tmp = *(str+left);//str[left]
*(str+left)=*(str+right);
*(str+right)=tmp;
left++;
right--;
}
}
int main()
{
char arr[]="abcdef";
reverse_string1(arr);
printf("%s\n", arr);
}
递归
#include <stdio.h>
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
void reverse_string(char *str)
{
char tmp = *str;
int len = my_strlen(str);
*str =*(str + len - 1);
*(str +len -1)='\0';
if(my_strlen(str+1)>=2)
{
reverse_string(str+1);
}
*(str+len-1)=tmp;
}
int main()
{
char arr[]="abcdef";
reverse_string(arr);
printf("%s\n", arr);
}