在 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() 函数释放它,以避免内存泄漏。
