首页 > 编程语言 >实验3 数组、指针与现代C++标准库

实验3 数组、指针与现代C++标准库

时间:2022-10-20 19:45:24浏览次数:44  
标签:Info string int text cout C++ 数组 include 指针

实验任务五:

Info.hpp:

#pragma once
#include<iostream>
#include<string>
#include<iomanip>

using namespace std;

class Info {
private:
    string nickname, contact, city;
    int n;

public:
    Info(string a, string b, string c, int d) :nickname{ a }, contact{ b }, city{ c }, n{ d }{}
    ~Info() = default;
    void print()const;
};


void Info::print()const {
    
    cout << left << setw(7) << "昵称:" << nickname << endl;
    cout << left << setw(7) << "联系方式:" << contact << endl;
    cout << left << setw(7) << "所在城市:" <<city << endl;
    cout << left << setw(7) << "预定人数:" <<n << endl;
    cout << endl;
}

task5.cpp:

#include"Info.hpp"
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>


int main()
{
    using namespace std;
    const int capacity = 100;
    vector<Info> audience_info_list;
    string s1, s2, s3;
    char ch;
    int m;
    static int count;
    count = 0;
    cout << "录入信息:\n\n" << "昵称   " << "联系方式(邮箱/手机号)   " << "所在城市       " << "预定参加人数" << endl;
    while (cin >> s1) {
        cin >> s2 >> s3 >> m;
        if (count + m < capacity)
        {
            Info aud(s1, s2, s3, m);
            audience_info_list.push_back(aud);
            count += m;
            if (m == capacity)
                break;
        }
        else
        {
            int left = capacity - count ;
            cout << "对不起,只剩" << left << "个位置。" << endl;
            cout << "1.输入u,更新(update)预定信息。" << endl;
            cout << "2.输入q,退出预定。" << endl;
            cout << "你的选择:";
            cin >> ch;
            if (ch == 'q')
            {
                cout << endl;break;
            }
            else continue;
        }
    }
        cout << "截至目前,一共有" << count << "位听众预定参与。预定听众信息如下:" << endl;
        for (auto item : audience_info_list)
        {
            item.print();
        }
    
}

当听众在限制人数内的测试结果:

当听众人数超载的测试结果:

实验任务六:

TextCoder.hpp:

#pragma once
#include<iostream>
#include<string>

using namespace std;

class TextCoder {
private:
    string text;
    void encoder()
    {
        for (auto i = 0;i < size(text);++i)
            if (isalpha(text.at(i)))
            {
                if ((text.at(i) >= 'v'&&text.at(i)<='z' )||(text.at(i)<='Z'& text.at(i) >= 'V'))
                    text.at(i) -= 21;
                else
                    text.at(i) += 5;
            }
    }
    void decoder()
    {
        for (auto i = 0;i < size(text);++i)
            if (isalpha(text.at(i)))
            {
                if ((text.at(i) <= 'e'&&text.at(i)>='a') || (text.at(i)>='A'&&text.at(i) <= 'E'))
                    text.at(i) += 21;
                else
                    text.at(i) -= 5;
            }
    }
public:
    TextCoder(string t):text{t}{}
    ~TextCoder() = default;
    string get_ciphertext() { encoder();return text; }
    string get_deciphertext() { decoder();return text; }
};

task6.cpp:

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

void test()
{
    using namespace std;

    string text, encoded_text, decoded_text;

    cout << "输入英文文本:";
    while (getline(cin, text)) {
        encoded_text = TextCoder(text).get_ciphertext();

        cout << "加密后英文文本:\t" << encoded_text << endl;

        decoded_text = TextCoder(encoded_text).get_deciphertext();

        cout << "解密后英文文本:\t" << decoded_text << endl;
        cout << "\n输入英文文本:";
    }
}

int main()
{
    test();
}

测试结果:

实验总结:

双引号赋值一个字符串;
s[i]访问第i+1个字符;由此可见,string是类似数组的容器 ;
s.at(i)访问;
boolalpha<<(s=="nuist")字符串比较,false和true
s.length(),s.size()字符串长度;
auto pos=s.email("c")查找子串第一次出现的索引位置,失败返回string::nops;
s.substr(0,pos),s.substr(pos+1)取子串

 

标签:Info,string,int,text,cout,C++,数组,include,指针
From: https://www.cnblogs.com/z-zy/p/16811023.html

相关文章

  • C++类模型漫谈(三)
    系统基于32位,MSVC编译器,VS开发工具1、上篇直接通过类型对象调用成员函数,这种方式无法实现多态。所谓多态意思对函数的调用呈现出不同的形态。下面这个例子中a_ptr为指向......
  • 实验3 数组、指针与现代C++标准库
    实验5#pragmaonce#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classinfo{public:info(stringnickname0,stringcontact......
  • 分割数组的最大值问题
    分割数组的最大值问题作者:Grey原文地址:博客园:分割数组的最大值问题CSDN:分割数组的最大值问题题目说明给定一个非负整数数组nums和一个整数m,你需要将这个数组分成......
  • 项目开发神器VsCode配置指南!(含C++、Python、Java环境配置)
    作者:吴忠强,东北大学,Datawhale成员本篇文章虽然是VsCode挂名,但其实介绍了两款神器:Vscode和Vim,这两个结合起来,开发效率蹭蹭蹭!!!之前接触过VsCode但很少用。总感觉写Python......
  • 尺取(双指针)
    概述复杂度:O(n)作用:优化双层循环使用场景:两个指针具有单向性(只加不减或只减不加)思想:利用两个指针去遍历数组。一般来说,遍历数组采用的是单指针(index)去遍历,两个指......
  • 【力扣每日一题】第一题,一维数组的动态和
    题目给你一个数组nums。数组「动态和」的计算公式为:runningSum[i]=sum(nums[0]…nums[i])。请返回nums的动态和。示例1输入:nums=[1,2,3,4]输出:[1,3,6,10]解释:动态......
  • 【C语言】野指针
    ......
  • C函数指针和回调函数
    函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传......
  • #打卡不停更#三方库移植之NAPI开发[2]C/C++与JS的数据类型转换
    在《三方库移植之NAPI开发[1]—HelloOpenHarmonyNAPI》通过一个HelloOpenHarmonyNAPI样例讲述了NPAI接口开发基础知识。本文在其基础上修改hellonapi.cpp文件,介绍JS类型......
  • C++ 值,指针,引用的讨论
    源自stackoverflow论坛,很有意义第一个问题,引用传递和按值传递的场合Therearefourmaincaseswhereyoushouldusepass-by-referenceoverpass-by-value:Ifyou......