字符串逆序(递归实现),不能使用C函数库中的字符串操作函数。 char arr [] =“abedef” 逆序之后数组的内容变成: fedcba
先分析题目,如果不用递归如何实现?
双指针,一个从头走,一个从尾走,交换两个元素,直接贴代码
void reverse_string2(char* arr) { int len=strlen(arr); int left=0,right=len-1; while(left<right)//<=都可,因为当left>right或是=right时,一个元素或者小于一个元素的交换都一样 { //交换左右变量 int temp=arr[left]; arr[left]=arr[right]; arr[right]=temp; left++; right--; } }
那么,问题来了,用递归怎么实现呢.先来看下我画的粗略图:(
依次解释下操作
这里递归的结束条件就是数组的长度要大于等于2,因为小于2的逆序没有意义.
下面是代码
void reverse_string(char* arr) { char temp=*arr;//首元素存放好 int len=strlen(arr); *arr=*(arr+len-1);//最后一个元素到首位 *(arr+len-1)='\0';//最后一个元素等于\0,给定下次遍历的右范围 if(strlen(arr+1)>=2) { reverse_string(arr+1);//给定下次遍历的左范围 } *(arr+len-1)=temp;//把当前的最后元素,也就是\0,替换成首元素 }