编写一个函数reverse_string(char * string)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
- 非递归实现
void reverse(char *str) { char *left = str; char *right = str + strlen(str) - 1; while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } }
2.递归实现
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char* reverse_string(char * string,int len); int i,LEN=0; char arr[]="abcd"; LEN=strlen(arr); char ret[LEN]; char *p=arr; for(i=0;i<LEN;i++) ret[i]=*(reverse_string(p,LEN)); printf("%s\n",ret); system("pause"); return 0; } char* reverse_string(char * string,int len) { int static j=0; char s[len]="0"; if(*string==‘\0‘) return s; else { s[len-j]=*string; j++; reverse_string(string++); } }
递归优化:
int length(char *str) { int count = 0; while (*str) { count++; str++; } return count; } void reverse(char *str) { int len = length(str); if (len== 0) { return; } else { char tmp = *str; *str = *(str + len - 1); *(str + len - 1) = ‘\0‘; reverse(1+str); *(str + len - 1) = tmp; } } int main() { char arr[] = "bit-tech"; reverse(arr); printf("%s\n", arr); system("pause"); return 0; }
递归调用图如下
时间: 2024-10-11 17:50:24