C/C++ 每日一练:实现一个字符串(C 风格)反转函数

字符串(C 风格)

题目要求

         编写一个函数,接受一个字符串作为输入,并返回该字符串的反转版本。例如,输入字符串 "hello" 应输出 "olleh"。

功能要求

  1. 函数应能够处理不同长度的字符串,包括空字符串。
  2. 输入字符串只包含字母、数字和常规字符(不包含多字节字符)。
  3. 不允许使用库函数,如 strrev 、std::reverse或类似的专门用于字符串反转的函数,要求自己实现。

思路解析

  1. 字符串的存储方式:在 C 语言中,字符串是以字符数组形式存储的,并且以 \0(空字符)作为结束符。因此,需要通过遍历数组来实现字符串的反转。

  2. 反转算法

    • 使用两个指针,一个指向字符串的开头,另一个指向字符串的末尾。
    • 交换这两个指针所指向的字符,并向中间推进,直到两个指针相遇或交错。
    • 这样,在原地反转字符串,避免额外的空间消耗。
  3. 边界情况:需要考虑如下特殊情况:

    • 空字符串:直接返回空字符串。
    • 单字符字符串:无需处理,直接返回原字符串。
    • 两个指针相遇或交错的判断条件,例如start < end。

过程解析

  1. 输入检查:首先检查输入字符串是否为空或长度为 1,如果是,直接返回。
  2. 指针操作:使用两个指针分别指向字符串的起始位置和结束位置,然后交换这两个位置的字符。
  3. 逐步推进指针:每次交换后,起始指针向后移动,结束指针向前移动,直到它们相遇或交错。
  4. 返回结果:反转完成后,返回修改后的字符串。

运用的知识点

  1. 指针操作:C/C++ 中处理字符串时,往往会用到指针进行遍历和操作,尤其是对字符数组的处理。
  2. 数组操作:了解数组的基本操作和边界检查。
  3. 字符交换:在反转过程中需要交换字符,通过一个中间变量完成。
  4. 条件判断和循环:用 while 循环来实现字符串的遍历,并通过条件判断来处理边界情况。

示例代码

C 示例

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

// 字符串反转函数
void reverseString(char *str) {
    if (str == NULL) {
        return;  // 如果输入为空,直接返回
    }

    int len = strlen(str);  // 获取字符串的长度(长度不包括末尾的 \0 字符)
    int start = 0;          // 起始指针,指向字符串开头
    int end = len - 1;      // 结束指针,指向字符串末尾

    // 当 start 小于 end 时,交换字符
    while (start < end) {
        // 交换 str[start] 和 str[end]
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;

        // 更新指针位置
        start++;
        end--;
    }
}

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

    reverseString(str);  // 调用反转函数

    printf("反转后的字符串: %s\n", str);  // 输出结果

    return 0;
}

C++ 示例

#include <iostream>
#include <cstring>  // 包含 C 风格字符串的函数

// 字符串反转函数
void reverseString(char *str) {
    if (str == nullptr) // nullptr是C++11引入的关键字,用于表示空指针,比C语言中的 NULL 更加类型安全。
    {
        return;  // 如果输入为空,直接返回
    }

    int len = strlen(str);  // 获取字符串长度
    int start = 0;          // 起始位置
    int end = len - 1;      // 结束位置

    // 交换字符
    while (start < end) {
        std::swap(str[start], str[end]);  // 使用 C++ 的 swap 函数进行交换
        start++;
        end--;
    }
}

int main() {
    char str[] = "world";  // 输入字符串
    std::cout << "原始字符串: " << str << std::endl;

    reverseString(str);  // 调用反转函数

    std::cout << "反转后的字符串: " << str << std::endl;  // 输出结果

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_60461563/article/details/143058241