如何反转一个给定的字符串?这里有两种方式:一种时双指针的方式,另一种是递归的方式;如果对双指针的方式还不了解的话,请看我之前写过的文章http://t.csdnimg.cn/OLvki。那么我这次主要说的是用递归的方式进行字符串的反转,如过不会或者不了解的话,那么在看完这篇博客之后你会对字符串的反转和对递归过程有一次更加深层次的理解。话不多说,直接上才艺。
1.定义一个字符串数组 str :假设 str[]="abcdef";
2.递归函数:任何递归函数都一定会有递归约束条件,一旦达到约束条件时就会结束递归过程中的递过程而开始归的过程。如果没有约束条件,那么函数就会重复调用该函数,形成死递归。无论是在学习还是写项目的中,这都是非常忌讳的。那么字符串的递归结束条件又是什么呢?由于字符串的长度 len2>=2 时才有反转字符串的说法。因此,字符串的长度 len>=2 就是递归约束件。
3.实现递归函数:反转字符串就是把字符串逆序而已,所以,我们可以字符变量 tmp 存放首字符,把最后一个字符放在首字符的位置。由于我们已经保存了第一个字符且最后一个字符放在起始位置,所以把最后一个字符的位置放入字符串结束表示 '\0' ,同时回归过程中 tmp 存放的字符也是放在这个位置;这时判断字符串长度,如 len>=2 那就符合递归条件,则调用递归函数传入字符串为 str+1 ,为什么时 str+1 ?因为我们已经把每次递归字符串的最后一个字符放在起始位置,那么该位置的字符就不需要纳入递归的范畴。函数在回归过程中会把 tmp 存放的字符放入当前字符串的最后一个字符位置即是添加 '\0' 的位置。
4.至此,递归逆序字符串就完成了。如果有不清楚的地方可以在纸上画出递归的过程,那就回清晰很多。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char* str) //指针和数组的方式都可以改变原值
{
char tmp = str[0]; //递归过程中保存首字符
int len = strlen(str);//递归中字符串的长度
str[0] = str[len - 1];//把每次递归中的最后一个字符放在首字符的位置
str[len - 1] = '\0'; //存放字符结束标志,回归时放入暂存字符的位置
if (strlen(str) >= 2) //递归约束条件(字符串长度大于等于2时,才需要反转)
{
reverse(str + 1); //起始位置字符已反转,则传入已第二个字符为起始位置的字符串
}
str[len - 1] = tmp; //回归过程中,把每次暂存的第一个字符放到最后一个字符的位置
}
int main()
{
char str[10];
scanf("%s", str);
reverse(str);
printf(str);
return 0;
}
以上为自己对逆序字符串的一些见解;如果有误,请大家不吝指正!!!!