C 字符串反转

在 C 语言中,我们可以使用 strrev() 函数来反转一个字符串(也就是将字符串所有字符颠倒顺序)。

特别注意,strrev() 并不是标准的 C 语言库函数,而是一些编译器(如 Turbo C/C++、Microsoft Visual C++ 等)提供的扩展。

语法:

strrev(str)

说明:

strrev() 函数接收单个参数。

  • str(char*):是一个字符串。

提示:

  • strrev 是 “string rev(字符串反转)” 的缩写。
  • strrev() 是一个破坏性函数,它会修改原字符串。

示例 1:strrev() 反转字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "lvye";

    strrev(str);
    puts(str);

    return 0;
}

运行结果如下。

eyvl

分析:

strrev() 函数会修改原字符串。如果不希望修改原字符串,我们可以先使用 strcpy() 函数将原字符串复制一份,然后再使用 strrev() 函数将其反转,请看下面例子。

示例 2:使用 strcpy() + strrev() 反转字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "lvye";
    char result[10];

    // 将 str 复制到 result
    strcpy(result, str);
    // 反转 str
    strrev(str);

    puts(str);
    puts(result);
    return 0;
}

运行结果如下。

eyvl
lvye

分析:

从结果可以看出,此时原字符串就没有被 strrev() 函数修改了。

示例 3:自定义反转字符串的函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>     // 包含 malloc 和 free

char* reverseString(const char* str) 
{
    if (str == NULL) {
        return NULL;
    }
    size_t length = strlen(str);

    // 为反转后的字符串分配内存
    char* reversedStr = (char*)malloc(sizeof(char) * (length + 1));
    if (reversedStr == NULL) 
    {
        return NULL;       // 内存分配失败
    }

    // 从后向前复制字符
    for (size_t i = 0; i < length; i++) 
    {
        reversedStr[i] = str[length - 1 - i];
    }

    // 添加空终止符
    reversedStr[length] = '\0'; 
    
    return reversedStr;
}

int main(void) 
{
    char str[] = "lvye";
    char* reversed = reverseString(str);

    if (reversed != NULL) 
    {
        printf("原始字符串: %s\n", str);
        printf("反转字符串: %s\n", reversed);
        free(reversed);       // 释放分配的内存
    }

    return 0;
}

运行结果如下。

原始字符串: lvye
反转字符串: eyvl

分析:

在上面例子中,我们自定义了一个名为 reverseString 的函数。在该函数中,首先计算输入字符串的长度,然后动态分配足够的内存来存储反转后的字符串。接着,它从原始字符串的末尾开始,逐个字符地复制到新分配的内存中,并在末尾添加空终止符。最后,返回指向反转后字符串的指针

注意: 使用完动态分配的内存后,需要使用 free() 函数释放它,以避免内存泄漏。

上一篇: C 字符串分割

下一篇: C 函数

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号