实验任务三

源代码

点击查看代码
#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';
}

3

问题1

一元 func:接收一个元素,返回转换结果
二元 func:接收两个元素(分别来自两个输入序列),返回运算结果

问题2

tolower(c):大写字母转小写;非大写字母保持原样(注意:参数要转 unsigned char 避免未定义行为)
toupper(c):小写字母转大写;非小写字母保持原样

问题3

first1:第一个输入区间起始迭代器
last1:第一个输入区间尾后迭代器
dest:输出目标起始迭代器
func:一元转换函数

posted @ 2026-10-22 14:41  d111kkk  阅读(2)  评论(0)    收藏  举报