【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函数,而第二种方法则是通过手动遍历字符串中的每个字符来实现。两种方法都是有效且常用的。

相关推荐
2501_9333295510 小时前
企业级舆情监测系统技术解析:Infoseek数字公关AI中台架构与实践
开发语言·人工智能·自然语言处理·架构
Wave84510 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H11 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
.柒宇.11 小时前
Java八股之反射
java·开发语言
环流_11 小时前
多线程1(面试题--常见的线程创建方式)
java·开发语言·面试
不想写代码的星星11 小时前
C++17 string_view 观察报告:好用,但有点费命
c++
努力努力再努力wz11 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz11 小时前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
Han_han91911 小时前
常用API:
java·开发语言
minji...11 小时前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++