C练习——字符串逆序

发布时间 2023-12-19 09:01:51作者: 王小龙s

将“abcdefg”逆序

注意题意是将字符串逆序,会对字符串本身进行操作,而不是单纯逆序打印

方法一:非递归

#include <stdio.h>
#include <string.h>
// 将“abcdefg”逆序
// 注意题意是将字符串逆序,会对字符串本身进行操作,而不是单纯逆序打印

void reverse(char arr[])
{
    int sz = strlen(arr);    //计算字符串长度,注意sizeof要在主函数内且会多计算一个‘\0’

    int left = 0;
    int right = sz -1;            // 设置左右起点

    int temp = 0;                // 交换中间量

    for (left = 0; left < right; left++)
    {
        temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        right -= 1;
    }
}
int main()
{
    char arr[] = "abcdefg";
    reverse(arr);         // 逆序函数
    printf("%s\n", arr); //打印字符串数组
}

 

 

 方法二:递归实现

#include <stdio.h>
// 递归法
void reverse(char *str)   // 这样的形参传参和之前的本质一样,便于理解
{
    int tmp = *str;    //1 将a赋值给临时变量
    int len= strlen(str);    //计算字符串长度,注意sizeof要在主函数内且会多计算一个‘\0’
    *str = *(str + len - 1); // 2 将g赋值给原来a的内存
    *(str + len - 1) = '\0'; // 3 原来g的位置放 '\0',得到新字符串“gbcdef”

    if (strlen(str + 1) >= 2)  // 4 开始递归
        reverse(str + 1);
    *(str + len - 1) = tmp; // 5 将临时变量里的值拿来放到最后的'\0'
}

int main()
{
    char arr[] = "abcdefg";
    reverse(arr);         // 逆序函数
    printf("%s\n", arr); //打印字符串数组
}