059. 实现字符串的反转

在C语言中,字符串反转是一个常见的操作。通过手动实现字符串反转函数,可以更好地理解字符串操作的基本原理。字符串反转通常可以通过交换字符的方式实现。

C语言实现字符串反转

#include <stdio.h>
#include <string.h> // 用于 strlen 函数

// 自定义字符串反转函数
void reverseString(char* str) {
    if (str == NULL) {
        printf("输入的指针为空!\n");
        return;
    }

    int length = strlen(str); // 获取字符串长度
    int i = 0;
    int j = length - 1;

    // 使用双指针法交换字符
    while (i < j) {
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }
}

int main() {
    char str1[] = "Hello, World!";
    char str2[] = "Programming";

    printf("原始字符串1: %s\n", str1);
    printf("原始字符串2: %s\n", str2);

    // 调用自定义字符串反转函数
    reverseString(str1);
    reverseString(str2);

    printf("反转后的字符串1: %s\n", str1);
    printf("反转后的字符串2: %s\n", str2);

    return 0;
}

代码说明

函数定义

  • reverseString 接收一个参数:目标字符串 str

  • 检查输入指针是否为空,避免空指针解引用导致的错误。

获取字符串长度

  • 使用 strlen 函数获取字符串的长度。

双指针法交换字符

  • 使用两个指针 ij,分别指向字符串的首尾。

  • 通过 while 循环,逐个交换首尾字符,直到 ij 相遇。

主函数

  • 定义两个测试字符串 str1str2

  • 调用 reverseString 函数反转字符串。

  • 打印原始字符串和反转后的字符串。

示例运行

输入:

无输入

输出:

原始字符串1: Hello, World!
原始字符串2: Programming
反转后的字符串1: !dlroW ,olleH
反转后的字符串2: gnimmargorP

注意事项

  1. 空指针检查:在函数中检查输入指针是否为空,避免空指针解引用导致的程序崩溃。
  2. 字符串结束符:确保字符串以 '\0' 结尾,否则 strlen 函数可能会导致未定义行为。
  3. 原地反转:该实现直接在原字符串上进行操作,不使用额外的存储空间。

使用标准库函数实现字符串反转

虽然手动实现字符串反转函数有助于理解字符串操作的原理,但在实际开发中,通常推荐使用标准库函数来实现更复杂的字符串操作。C语言标准库中没有直接的字符串反转函数,但可以通过组合使用 strrev(在某些平台上可用)或其他方法来实现。

#include <stdio.h>
#include <string.h> // 包含 strlen 函数

int main() {
    char str1[] = "Hello, World!";
    char str2[] = "Programming";

    printf("原始字符串1: %s\n", str1);
    printf("原始字符串2: %s\n", str2);

    // 使用标准库函数 strrev(如果可用)
    // 注意:strrev 不是标准C库的一部分,可能需要自己实现或使用其他方法
    strrev(str1);
    strrev(str2);

    printf("反转后的字符串1: %s\n", str1);
    printf("反转后的字符串2: %s\n", str2);

    return 0;
}

总结

通过手动实现字符串反转函数,可以更好地理解字符串操作的基本原理。在实际应用中,虽然没有标准的字符串反转函数,但可以使用自定义函数或平台特定的函数来实现这一功能。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)