C strrev() 函数

C strrev() 语法

在 C 语言中,strrev() 函数通常用于将一个字符串中的字符顺序反转。

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

语法:

strrev(str)

说明:

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

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

strrev() 函数会反转输入字符串 str 中的字符顺序,但不包括字符串末尾的空字符('\0')。

提示:

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

C strrev() 摘要

使用频率
修改字符串
官方文档

C strrev() 示例

接下来,我们通过几个简单的例子来讲解一下 C 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);
    // 反转副本
    strrev(result);

    puts(str);
    puts(result);

    return 0;
}

运行结果如下。

lvye
eyvl

分析:

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

深入了解 strrev()

strrev() 并不是标准 C 函数,其在不同编译器上的可用性和具体行为可能有所差异。为了确保代码的可移植性,我们强烈推荐使用标准的 C 语法手动编写代码来实现字符串反转。

示例 3:使用标准 C 语法来实现反转字符串

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

void reverseStr(char *str) {
    // 判断是否为 NULL
    if (str == NULL) {
        return;
    }

    // 计算字符串的长度(不包括 null 结束符)
    size_t len = strlen(str);
    size_t i;
    char temp;

    // 循环遍历字符串的前半部分
    // 我们只需要迭代到 len / 2,因为每次交换两个字符
    for (i = 0; i < len / 2; i++) {
        temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
}

int main(void)
{
    char str[] = "lvye";
    printf("原始字符串: %s\n", str);

    reverseStr(str);
    printf("反转后结果: %s\n", str);

    return 0;
}

运行结果如下。

原始字符串 : lvye
反转后结果 : eyvl

分析:

在这个例子中,我们定义了一个名为 “reverseStr” 的函数,该函数的功能是就地反转一个给定的字符串。

reverseStr() 函数会先判断输入的字符串指针是否为空,从而避免错误。如果字符串有效,它会计算字符串的长度,然后使用一个 for 循环,并通过一个临时变量 temp 来不断交换字符串开头和结尾对应位置的字符(比如第一个和最后一个、第二个和倒数第二个、以此类推),直到遍历到字符串的中间位置。经过上面操作后,原字符串的内容就被反转了。

上一篇: strlwr()

下一篇: C <string.h> 标准库

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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