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

来源:互联网 发布:淘宝分析数据 编辑:程序博客网 时间:2024/06/10 05:58

题目:编写一个函数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;}

附上一个结果图
这里写图片描述

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

原创粉丝点击