【C++】C++实现字符串大小写转换功能

在C++中,实现字符串大小写转换可以通过标准库中的函数来完成。以下是两种常见的方法:

使用标准库函数std::transform

std::transform是一个泛型算法,可以用来对序列中的每个元素应用一个给定的函数,并把结果存储到另一个序列中。这里我们可以使用tolowertoupper函数来转换字符的大小写。

cpp 复制代码
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>

std::string toLowerCase(const std::string& str) {
    std::string lowerCaseStr = str;
    std::transform(lowerCaseStr.begin(), lowerCaseStr.end(), lowerCaseStr.begin(),
                   [](unsigned char c){ return std::tolower(c); });
    return lowerCaseStr;
}

std::string toUpperCase(const std::string& str) {
    std::string upperCaseStr = str;
    std::transform(upperCaseStr.begin(), upperCaseStr.end(), upperCaseStr.begin(),
                   [](unsigned char c){ return std::toupper(c); });
    return upperCaseStr;
}

int main() {
    std::string original = "Hello World!";
    std::string lower = toLowerCase(original);
    std::string upper = toUpperCase(original);

    std::cout << "Original: " << original << std::endl;
    std::cout << "Lower Case: " << lower << std::endl;
    std::cout << "Upper Case: " << upper << std::endl;

    return 0;
}

使用循环遍历字符串

如果你不想使用std::transform,也可以通过遍历字符串中的每个字符,并使用tolowertoupper函数来转换。

cpp 复制代码
#include <iostream>
#include <string>
#include <cctype>

std::string toLowerCase(const std::string& str) {
    std::string lowerCaseStr;
    for (char c : str) {
        lowerCaseStr += std::tolower(c);
    }
    return lowerCaseStr;
}

std::string toUpperCase(const std::string& str) {
    std::string upperCaseStr;
    for (char c : str) {
        upperCaseStr += std::toupper(c);
    }
    return upperCaseStr;
}

int main() {
    std::string original = "Hello World!";
    std::string lower = toLowerCase(original);
    std::string upper = toUpperCase(original);

    std::cout << "Original: " << original << std::endl;
    std::cout << "Lower Case: " << lower << std::endl;
    std::cout << "Upper Case: " << upper << std::endl;

    return 0;
}

这两种方法都可以实现字符串的大小写转换。第一种方法使用了标准库的std::transform函数,而第二种方法则是通过手动遍历字符串中的每个字符来实现。两种方法都是有效且常用的。

相关推荐
Cx330❀4 分钟前
【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列
c++·算法
Cx330❀8 分钟前
【优选算法必刷100题】第038题(位运算):消失的两个数字
开发语言·c++·算法·leetcode·面试
Loo国昌9 分钟前
深入理解 FastAPI:Python高性能API框架的完整指南
开发语言·人工智能·后端·python·langchain·fastapi
燃于AC之乐10 分钟前
我的算法修炼之路--5——专破“思维陷阱”,那些让你拍案叫绝的非常规秒解
c++·算法·贪心算法·bfs·二分答案·扩展域并查集·动态规划(最长上升子序列)
艾莉丝努力练剑10 分钟前
【优选算法必刷100题】第021~22题(二分查找算法):山脉数组的峰顶索引、寻找峰值
数据结构·c++·算法·leetcode·stl
hoiii1871 小时前
16APSK/32APSK调制解调MATLAB仿真实现
开发语言·matlab·fpga开发
feifeigo1231 小时前
基于MATLAB的情感语音模板培训与识别实现方案
开发语言·matlab
JH30731 小时前
Java Spring中@AllArgsConstructor注解引发的依赖注入异常解决
java·开发语言·spring
码农水水2 小时前
米哈游Java面试被问:机器学习模型的在线服务和A/B测试
java·开发语言·数据库·spring boot·后端·机器学习·word
C++ 老炮儿的技术栈2 小时前
C/C++ 中 inline(内联函数)和宏定义(#define)的区别
开发语言·c++·git·算法·机器人·visual studio