实验二:指针,数组和c++标准库

实验五:

”info.hpp“

#ifndef info_hpp
#define info_hpp
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class info
{
public:
    info(string nic, string con, string cit, int  n0) :nickname(nic), contact(con), city(cit), n(n0) { num+=n; };
    void print() const;
    static int show_num() { return num; };
private:
    string nickname,contact,city;
    int n;
    static int num;
};
int info::num = 0;//静态成员初始化
void info::print() const
{
    cout << setiosflags(ios::left);//设置输出是左对齐
    cout << setw(10) << "称呼:" << nickname << endl;//setw设置输出为10个空间,不足的用空格补齐,补齐的方向和上述的输出对齐方向一致
    cout << setw(10) << "联系方式:" << contact << endl;//setw只对后面的一个<<有效
    cout << setw(10) << "所在城市:"  << city << endl;
    cout << setw(10) << "预定人数:"  << n << endl;
}
#endif

task5.cpp

#include <iostream>
#include <vector>
#include "info.hpp"
int main()
{
    using namespace std;
    vector<info>audience_info_list;//定义了一个元素是info对象的数组
    const int capacity = 100;//初始化
    //录入信息
    cout << "录入信息" << endl;
    cout << "称呼/昵称, 联系方式(邮箱/手机号), 所在城市, 预定参加人数" << endl;
    string nickname, contact, city;
    int n = 0;
    int total = 0;//记录总共的观众人数
    while (cin >> nickname >> contact >> city >> n)
    {
        if (total + n > 100)
        {
            cout << "对不起,只剩" << capacity - total << "个位置." << endl;
            cout << "1.输入u,更新预定信息." << endl;
            cout << "2.输入q,退出预定" << endl;
            cout << "你的选择:";
            char c;
            cin >> c;
            if (c == 'q')
                break;
            else
                continue;
        }
        total += n;
        info m(nickname, contact, city, n);//定义一个对象
        audience_info_list.push_back(m);//在尾部插入元素
    }
    cout << "截至目前,一共有" << info::show_num() << "位听众参加。预定听众信息如下:" <<endl;
    for (auto i : audience_info_list)//用i遍历容器audience_info_list中的值
    {
        i.print();
    }
}

测试结果截图:

 

 实验六

TextCoder.hpp

#ifndef TextCoder_hpp
#define TextCoder_hpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class TextCoder
{
public:
    TextCoder(string x) :text(x) {};
    string encoder();
    string decoder();
private:
    string text;
};
string TextCoder::encoder()
{
    for (auto& i : text)
    {
        if (i >= 'a' && i <= 'u')
            i = i + 5;
        else if (i > 'u' && i <= 'z')
            i = i - 21;
        if (i >= 'A' && i <= 'U')
            i = i + 5;
        else if (i > 'U' && i <= 'Z')
            i = i - 21;
        else;
    }
    return text;
}
string TextCoder::decoder()
{
    for (auto& i : text)
    {
        if (i >= 'a' && i <= 'e')
            i = i + 21;
        else if (i > 'e' && i <= 'z')
            i = i - 5;
        if (i >= 'A' && i <= 'E')
            i = i + 21;
        else if (i > 'E' && i <= 'Z')
            i = i - 5;
        else;
    }
    return text;
}
#endif

task6

#include "TextCoder.hpp"
#include <iostream>
#include <string>

int main()
{
    using namespace std;

    string text, encoded_text, decoded_text;

    cout << "输入英文文本: ";
    while (getline(cin, text))
    {
        encoded_text = TextCoder(text).encoder();  // 这里使用的是临时无名对象
        cout << "加密后英文文本:\t" << encoded_text << endl;

        decoded_text = TextCoder(encoded_text).decoder(); // 这里使用的是临时无名对象
        cout << "解密后英文文本:\t" << decoded_text << endl;
        cout << "\n输入英文文本: ";
    }
}

测试结果截图

 

 实验总结:

  • 实验五:
  1. 首先就是设置输出格式可以用setiosflags()函数和setw()来操作
  2. 其次就是巧用vector构造对象数组
  3. for(auto i:s)的意思是用i遍历容器s中的值,不能改变容器中的值,如果是for(auto &i:s)便可以改变s里的值、
  4. string是在std中的所以要记住要加std
  5. 我定义了一个静态成员函数记录观众数,其实大可不必
  • 实验六;
  1. 没什么好说的,应该是可以用更灵活的方式得出结果
  2. 枚举挺简单的,就直接枚举了
posted @ 2021-11-02 17:11  越来越懒了  阅读(26)  评论(3)    收藏  举报