数据结构04附录01:字符串大写转小写[C++]-LMLPHP

图源:文心一言

上机题目练习整理~🥝🥝

本篇作为字符串的代码补充,提供了3种(差别并不大)解法以及函数的详细解释,供小伙伴们参考~🥝🥝

前文:🌸数据结构04:串的存储结构与KMP算法_串的三种存储方式-CSDN博客

  • 第1版:在力扣新手村刷题的记录,方法一与方法二是 文心一言 老师提供的建议,方法三是力扣的官方解法~🧩🧩

编辑:梅头脑🌸

题目:709. 转换成小写字母 - 力扣(LeetCode)


📇目录

🧵转换小写字母的题目

🧩题目

🌰方法一:for循环 + 转小写函数tolower

🌰方法二:transform转换 + 转小写函数tolower

🌰方法三:for循环 + ASCII码

🔚结语


🧵转换小写字母的题目

🧩题目

🌰方法一:for循环 + 转小写函数tolower

📇算法思路

 ⌨️算法代码

class Solution {
public:
    string toLowerCase(string s) {    // 返回类型为string的方法,名为toLowerCase。它接受一个名为s的字符串参数
        for (char &c : s) {           // 基于范围的for循环,用于遍历字符串s中的每一个字符。这里使用的是C++11中的范围for循环语法
           c = std::tolower(c);       // 对于字符串s中的每个字符c,都调用了std::tolower函数。这个函数是C++标准库中的一个函数,用于将大写字母转换为小写字母
        }
        return s;  // 返回转换后的字符串  // 返回原始字符串s
    }
};

 ⌨️温馨提示

⌨️函数解释

基于范围的for循环(Range-based for loop) 

这种循环的基本语法如下:

for (element_type value : container) {  
    // 循环体  
}

 为什么使用基于范围的for循环?

例子

🌰方法二:transform转换 + 转小写函数tolower

📇算法思路

 ⌨️算法代码

class Solution {
public:
    string toLowerCase(string s) { 
        std::transform(s.begin(), s.end(), s.begin(), ::tolower);  // 将所有字符转换为小写  
        return s;  // 返回转换后的字符串  
    }
};
⌨️函数解释

⌨️知识扩展

上述代码感兴趣可以直接运行这个:

#include <iostream>
#include <vector>
#include <algorithm>  // 为了使用 std::transform

int main() {
    std::vector<double> deg_C {21.0, 30.5, 0.0, 3.2, 100.0};
    std::vector<double> deg_F(deg_C.size());

    std::transform(std::begin(deg_C), std::end(deg_C), std::begin(deg_F), [](double temp) { return 32.0 + 9.0 * temp / 5.0; });

    // 打印转换结果
    for (const auto& temp : deg_F) {
        std::cout << temp << " ";
    }

    return 0;
}

用静态数组也可以,不过文心老师温馨提醒,实际使用过程中,数组长度一般是固定的,灵活性小于容器,且不负责内存管理~

#include <iostream>

int main() {
    double deg_C[] = {21.0, 30.5, 0.0, 3.2, 100.0};
    double deg_F[5];  // 注意大小固定为5

    for (size_t i = 0; i < 5; ++i) {
        deg_F[i] = 32.0 + 9.0 * deg_C[i] / 5.0;
    }

    // 打印转换结果
    for (size_t i = 0; i < 5; ++i) {
        std::cout << deg_F[i] << " ";
    }

    return 0;
}

🌰方法三:for循环 + ASCII码

📇算法思路

⌨️算法代码

class Solution {
public:
    string toLowerCase(string s) {
        for (char& ch: s) {
            if (ch >= 65 && ch <= 90) {    // 如果字符为大写,即ASCII码介于65-90
                ch |= 32;                  // 对 ch 的 ASCII码与 32 做按位或运算,替代与 32的加法运算。
            }
        }
        return s;
    }
};

⌨️算法解释

第6行完全可以使用 ch = ch + 32;而官方采用了按位或运算ch |= 32,这么修改的条件如下:


🔚结语

博文到此结束,写得模糊或者有误之处,欢迎小伙伴留言讨论与批评,督促博主优化内容{例如有错误、难理解、不简洁、缺功能}等,博主会顶锅前来修改~~😶‍🌫️😶‍🌫️

我是梅头脑,本片博文若有帮助,欢迎小伙伴动动可爱的小手默默给个赞支持一下,感谢点赞小伙伴对于博主的支持~~🌟🌟

同系列的博文在以下链接~~🌸🌸

数据结构_梅头脑_的博客-CSDN博客数据结构04附录01:字符串大写转小写[C++]-LMLPHPhttps://blog.csdn.net/weixin_42789937/category_12262100.html?spm=1001.2014.3001.5482

01-13 08:59