使用std::transform结合std::toupper是C++中将字符串转为大写的推荐方法,通过lambda处理字符类型避免未定义行为;也可用范围for循环手动遍历转换;若需保留原字符串,可创建新字符串并逐字符转换,预分配空间提升效率。

在C++中,将字符串转换为大写有多种方法,常用的是使用标准库中的 std::toupper 函数结合遍历字符的方式。下面介绍几种实用且清晰的实现方式。
使用 std::transform 和 std::toupper
这是最常见和推荐的方法。利用 std::transform 算法对字符串中的每个字符应用 std::toupper,将其转为大写。
#include注意:lambda 中使用 unsigned char 是为了避免对负值调用 std::toupper 导致未定义行为(尤其在某些平台 char 是有符号类型)。
#include
#include
#include// std::toupper
int main() {
std::string str = "hello world";
std::transform(str.begin(), str.end(), str.begin(),
[](unsigned char c) { return std::toupper(c); });
std::cout << str << std::endl; // 输出: HELLO WORLD
return 0;
}
手动遍历并转换每个字符
如果想更直观地控制过程,可以使用 for 循环逐个字符处理。
#include这种方式逻辑清晰,适合初学者理解字符处理过程。
#include
#include
int main() {
std::string str = "c++ programming";
for (char &c : str) {
c = std::toupper(static_cast(c));
}
std::cout << str << std::endl; // 输出: C++ PROGRAMMING
return 0;
}
创建新字符串而不修改原字符串
如果你希望保留原字符串不变,可以构造一个新的大写字符串。
std::string toUpper(const std::string& input) {
std::string result;
result.reserve(input.size()); // 预分配空间提高效率
for (unsigned char c : input) {
result += std::toupper(c);
}
return result;
}
调用时:std::string upperStr = toUpper("keep original");
基本上就这些。使用 std::transform 是最简洁高效的方式,而手动循环则更灵活。关键是正确使用 std::toupper 并处理字符类型,避免潜在问题。不复杂但容易忽略细节。
Perl学习手札是台湾perl高手写的一篇文章,特打包为chm版,方便大家阅读。 关于本书 1. 关于Perl 1.1 Perl的历史 1.2 Perl的概念 1.3 特色 1.4 使用Perl的环境 1.5 开始使用 Perl 1.6 你的第一个Perl程序 2. 标量变量(Scalar) 2.1 关于标量 2.1.1 数值 2.1.2 字符串 2.1.3 数字与字符串转换 2.2 使用你自己的变量 2.3 赋值 2.3.1 直接设定 2.3.2 还可以这样 2.4 运算 2.5 变量的输出/输入 2.










