方式一:将字符串反向输出来,不改变内存(递归实现)
void reverse_string(char *str) { /*遇到'\0'什么也不做,函数结束*/ if(*str == '\0') ; else { /*输出下一个*/ reverse_string(str + 1); cout<<*str; } }
方式二:改变内存(交换法)
/*非递归实现:操作内存*/ char *reverse_string1(char *str) { char *left = str; //存放字符数组的最左边 char *right = str; //存放字符数组的最右边 while(*right != '\0') { right++; } /*while循环之后,right指向'\0',right--之后,指向最后一个非'\0'字符*/ right--; /*左右对称的两个元素交换*/ char temp; while(left < right) { temp = *left; *left = *right; *right = temp; left++; right--; } return str; }
方式三:改变内存(递归实现)
/*递归实现:操作内存*/ /*递归每调用一次:要反转的字符串头和尾各减少一个*/ char *reverse_string2(char *str) { int lenth = strlen(str); /*空字符串lenth=0或者lenth=1只有一个有效字符的字符串无需反转*/ if(lenth <= 1) { return NULL; } char temp; /*当字符串至少存在两个非'\0'字符时才用的到反转*/ if(lenth > 1) { temp = str[0]; str[0] = str[lenth-1]; /*最后一个字符在下次递归时不再处理*/ str[lenth - 1] = '\0'; /*递归每调用一次,要反转的字符串头和 尾各减少一个*/ reverse_string2(str + 1); str[lenth-1] = temp;//(利用站先入后出的特性) } return str; }
测试:
#include<stdio.h> #include<iostream> using namespace std; /*递归实现:操作内存*/ /*递归每调用一次:要反转的字符串头和尾各减少一个*/ char *reverse_string2(char *str) { int lenth = strlen(str); /*空字符串lenth=0或者lenth=1只有一个有效字符的字符串无需反转*/ if(lenth <= 1) { return NULL; } char temp; /*当字符串至少存在两个非'\0'字符时才用的到反转*/ if(lenth > 1) { temp = str[0]; str[0] = str[lenth-1]; /*最后一个字符在下次递归时不再处理*/ str[lenth - 1] = '\0'; /*递归每调用一次,要反转的字符串头和 尾各减少一个*/ reverse_string2(str + 1); str[lenth-1] = temp;//(利用站先入后出的特性) } return str; } /*非递归实现:操作内存*/ char *reverse_string1(char *str) { char *left = str; //存放字符数组的最左边 char *right = str; //存放字符数组的最右边 while(*right != '\0') { right++; } /*while循环之后,right指向'\0',right--之后,指向最后一个非'\0'字符*/ right--; /*左右对称的两个元素交换*/ char temp; while(left < right) { temp = *left; *left = *right; *right = temp; left++; right--; } return str; } void reverse_string(char *str) { /*遇到'\0'什么也不做,函数结束*/ if(*str == '\0') ; else { /*输出下一个*/ reverse_string(str + 1); cout<<*str; } } int main() { char str1[] = "ABCDEFGH"; char str2[] = "ABCDEFGH"; char str3[] = "ABCDEFGH"; cout<<reverse_string1(str1)<<endl; cout<<reverse_string2(str2)<<endl; reverse_string(str3); cout<<endl; return 0; }
时间: 2024-11-08 20:07:34