c/c++蓝桥杯经典编程题100道(6)字符串反转

字符串反转

->返回c/c++蓝桥杯经典编程题100道-目录


目录

字符串反转整理

一、题型解释

二、例题问题描述

C语言实现

解法1:双指针交换法(难度★)

解法2:递归反转(难度★★)

解法3:使用临时数组(难度★☆)

C++实现

解法1:使用reverse函数(难度★)

解法2:用栈反转(难度★☆)

解法3:反转句子中的单词(难度★★★)

特殊案例:只反转字母

总结对比表


一、题型解释

字符串反转是将原字符串的字符顺序完全颠倒的操作。常见

题型:

  1. 基础反转:将整个字符串完全反转(如 "hello" → "olleh")。

  2. 部分反转:反转字符串中的某个子区间(如反转前k个字符)。

  3. 单词级反转:按单词为单位反转(如 "hello world" → "world hello")。

  4. 特殊条件反转:保留特定字符位置不变(如仅反转字母,保留数字和符号)。


二、例题问题描述

例题1:输入字符串 s(假设只含小写字母),输出其完全反转后的字符串。
例题2:输入字符串 s(含空格),按单词反转顺序,如 "the sky is blue" → "blue is sky the"


C语言实现

解法1:双指针交换法(难度★)

就像两个同学从两头交换纸条

c

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

void reverseString(char* s) {
    int left = 0;                   // 左边的同学从第一个字符开始
    int right = strlen(s) - 1;      // 右边的同学从最后一个字符开始
    
    // 当左边同学还在右边同学左边时,继续交换
    while (left < right) {
        // 交换两人的纸条(字符)
        char temp = s[left];        // 临时保管左边的字符
        s[left] = s[right];         // 左边的位置放右边的字符
        s[right] = temp;            // 右边的位置放临时保管的字符
        
        left++;  // 左边同学往右走一步
        right--; // 右边同学往左走一步
    }
}

int main() {
    char s[] = "hello"; // 要反转的字符串
    reverseString(s);
    printf("%s", s); // 输出 olleh
    return 0;
}

代码逻辑

  1. 指针初始化left 指向字符串头部,right 指向尾部(需用 strlen 计算长度)。

  2. 交换过程:每次交换 left 和 right 位置的字符,之后 left 右移、right 左移。

  3. 终止条件:当 left >= right 时停止,确保所有字符被处理一次。

  4. 时间复杂度:O(n),空间复杂度 O(1)。

通俗解释

  1. 想象字符串是一排座位,每个座位坐一个字符

  2. 让最左边的同学(left)和最右边的同学(right

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值