📅  最后修改于: 2023-12-03 15:23:22.586000             🧑  作者: Mango
在C++中,STL的algorithm
库中提供了一个非常方便的函数,可以帮助我们将字符串中的字母部分全部转换为大写或小写,而不需要遍历字符串,这个函数就是transform
。
transform
函数的定义如下:
template <typename InputIt, typename OutputIt, typename UnaryOperation>
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op);
这个函数接受四个参数:
first1
和last1
表示输入范围,指定一个迭代器范围,表示需要进行转换的源字符串。d_first
表示输出范围,指定一个迭代器,表示转换后的结果将要存入的目标字符串。unary_op
是一个一元函数对象,用于指定转换规则。它会对输入字符串的每个元素进行操作,并将结果存储到输出字符串中。现在,我们可以使用transform
函数以及toupper
函数或tolower
函数将源字符串转换为大写或小写:
#include <algorithm>
#include <cctype>
#include <string>
std::string to_upper(const std::string& src) {
std::string result;
std::transform(src.begin(), src.end(), std::back_inserter(result), ::toupper);
return result;
}
std::string to_lower(const std::string& src) {
std::string result;
std::transform(src.begin(), src.end(), std::back_inserter(result), ::tolower);
return result;
}
这里使用了一个函数对象::toupper
或::tolower
。它们是C++标准库中的函数,定义在头文件<cctype>
中。它们分别将一个字符转换为大写或小写,返回转换的结果。
值得注意的是,这里使用了std::back_inserter
函数,它会在目标字符串的末尾自动插入元素。这样就不需要事先计算result
的长度,也不需要调用result.resize()
函数。在使用std::back_inserter
时,确保目标容器支持在尾部插入元素,例如vector
或string
容器。
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
std::string to_upper(const std::string& src) {
std::string result;
std::transform(src.begin(), src.end(), std::back_inserter(result), ::toupper);
return result;
}
std::string to_lower(const std::string& src) {
std::string result;
std::transform(src.begin(), src.end(), std::back_inserter(result), ::tolower);
return result;
}
int main() {
std::string input;
// 输入字符串
std::cout << "请输入一个字符串:" << std::endl;
std::getline(std::cin, input);
// 转换为大写
std::string upper_case = to_upper(input);
std::cout << "大写形式:" << upper_case << std::endl;
// 转换为小写
std::string lower_case = to_lower(input);
std::cout << "小写形式:" << lower_case << std::endl;
return 0;
}
这个程序首先会要求用户输入一个字符串,然后将这个字符串转换为大写和小写,并输出转换后的结果。