用递归算法实现逆序字符串

题目:编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。

解题思路:

逆序字符串,就是将字符串第一位和最后一位,第二位和倒数第二位依次互换,然后依次按序互换。根据题目给定函数reverse_string(char * string),就让指针string指向第一个字符。因为不能使用字符串操作函数就自己写一个MyStrlen()函数用于求字符串长度,string+MyStrlen(string)-1指向最后一个字符串。用string++依次指向下一个元素。

如何指向第二个元素呢?自己再定义一个static(静态)变量time,这样time就不会被销毁。time记录逆序次数,逆序一次time++,用string+MyStrlen(string)-1-time指向倒数第n个数。而停止互换的条件就是当最中间的字符已互换过,用string<(string + MyStrlen(string) – 1 – time)作为判断条件。

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<assert.h>

int MyStrlen(char arr[])
{
    int count = 0;
    int i = 0;
    while (arr[i] != '\0')
    {
        count++;
        i++;
    }
    return count;
}

char *reverse_string(char *string) {

    assert(string);//判断字符串是否为空,若为空则不执行下面的代码
    static int time = 0;
//若string小于(string + MyStrlen(string) - 1 - time)则继续互换
    if (string<(string + MyStrlen(string) - 1 - time)) {

        *string ^= *(string + MyStrlen(string) - 1 - time);
        *(string + MyStrlen(string) - 1 - time) ^= *string;
        *string ^= *(string + MyStrlen(string) - 1 - time);
        time++;
        reverse_string(++string);//递归
    }
    return string - 1;//返回第一次的地址,第一次传值++string已经使指针指向第二个数,所以要-1指向第一个

}

int main()
{
    char string[] = "AbCdEfG";
    char *ret;

    ret = reverse_string(string);

    printf("%s", ret);


    return 0;
}

附上一个结果图
《用递归算法实现逆序字符串》

最后,如果有疑问欢迎评论区留言提问呦,谢谢……

    原文作者:递归算法
    原文地址: https://blog.csdn.net/HaloTrriger/article/details/78540800
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞