实验任务三
源代码
点击查看代码
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
unsigned char func(unsigned char c);
void test1();
void test2();
int main() {
std::cout << "测试1: 字符串大小写转换\n";
test1();
std::cout << "\n测试2: 字符变换\n";
test2();
}
unsigned char func(unsigned char c) {
if(c == 'z')
return 'a';
if(c == 'Z')
return 'A';
if(std::isalpha(c))
return static_cast<unsigned char>(c+1);
return c;
}
void test1() {
std::string s1{"Hello World 2049!"};
std::cout << "s1 = " << s1 << '\n';
std::string s2;
for(auto c: s1)
s2 += std::tolower(c);
std::cout << "s2 = " << s2 << '\n';
std::string s3;
for(auto c: s1)
s3 += std::toupper(c);
std::cout << "s3 = " << s3 << '\n';
}
void test2() {
std::string s1{"I love cosmos!"};
std::cout << "s1 = " << s1 << '\n';
std::string s2(s1.size(), ' ');
std::transform(s1.begin(), s1.end(),
s2.begin(),
func);
std::cout << "s2 = " << s2 << '\n';
}

问题1
一元 func:接收一个元素,返回转换结果
二元 func:接收两个元素(分别来自两个输入序列),返回运算结果
问题2
tolower(c):大写字母转小写;非大写字母保持原样(注意:参数要转 unsigned char 避免未定义行为)
toupper(c):小写字母转大写;非小写字母保持原样
问题3
first1:第一个输入区间起始迭代器
last1:第一个输入区间尾后迭代器
dest:输出目标起始迭代器
func:一元转换函数

浙公网安备 33010602011771号