字符串反转实现的几种方式

来源:互联网 发布:阿里云cdn节点ip 编辑:程序博客网 时间:2024/05/16 05:12

方式一:将字符串反向输出来,不改变内存(递归实现

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;}







1 0
原创粉丝点击