首页 > 其他分享 >第三次实验

第三次实验

时间:2022-10-20 18:48:57浏览次数:55  
标签:Info 第三次 text v1 vector 实验 include string

task5:

#include<iostream>
#include<vector>
#include<string>
#include"5.1.h"
using namespace std;

int main()
{

cout<<"录入信息:"<<endl;
cout<<" 昵称"<<"     "<<"联系方式(邮箱\手机号)"<<"     "<<"所在城市"<<"     "<<"预定参加人数" <<endl; 
    int i=0,n0=0,sum=0;
    const int capacity=100;//最多的听众人数
    vector <Info> audience_info_list;
    string s1,s2,s3,s4;
while(Info::num<=capacity&&cin>>s1){
cin>>s1;cin>>s2;cin>>s3;cin>>n0;
Info f1(s1,s2,s3,n0);
audience_info_list.push_back(f1);
Info::num=Info::num+n0;

if(Info::num>capacity)
{sum=capacity-(Info::num-n0);
    cout<<"对不起,只剩"<<sum<<"个位置"<<endl;
    cout<<"1.输入u,更新预定信息"<<endl;
     cout<<"2.输入q,退出预定"<<endl;
     char s;
     cout<<"您的选择:";
     cin>>s;
     if(s=='q')
     {
     Info::num=Info::num-n0;
     break;
    }
     else if (s=='u')    
     {Info::num=Info::num-n0;
    continue;

}
     
     else
     cout<<"输入错误,请重新输入"<<endl; }
     
}
cout<<"截至目前,一共有"<<Info::num<<"位听众预定参加,他们的信息如下"<<endl;
for(i=0;i<audience_info_list.size();i++)
audience_info_list[i].print(); 
}
#include<iostream>
using namespace std;
class Info{
    public:
        Info()=default;
    Info(string name0,string email0,string city0,int n0):nickname(name0),contact(email0),city(city0),n(n0){    }
    void print(){cout<<" 昵称:"<<nickname<<endl;
    cout<<"联系方式:"<<contact<<endl;
    cout<<"所在城市:"<<city<<endl;
    cout<<"预定人数:"<<n<<endl;
    cout<<endl;}    
    static int num;
    private:
        string nickname,contact,city;
int n;
};
 int Info:: num =0;

第五次实验中出现的问题:考虑到代码的健壮性,就是我们在输入u的时候其实要重新回到循环里去输入的。一开始我想用goto的方法,但是没有成功,最后使用了continue来完成重新进入循环这一任务。同时,本次实验要注意pushback加的是整个对象,而不是对象里的某个元素,刚开始思考的时候陷入了把对象里的数据塞进vector中的误区。

 

task6:

#include<iostream>
#include<string>
using namespace std;
class TextCoder{
    
    public:
        TextCoder(string text1):text(text1){}
        string get_ciphertext(){excoder();return text;}
        string get_deciphertext(){decoder();return text;}
    private:
        void excoder(){
            int j=0;
            for(int i=0;i<text.length();++i){
    if(((text.at(j)>='a')&&(text.at(j)<='u'))||((text.at(j)>='A')&&(text.at(j)<='U')))
    text.at(j)=text.at(j)+5;
    else if(text.at(j)>'z'||text.at(j)<'A'||((text.at(j)>'Z')&&(text.at(j)<'a')))
;
else text.at(j)=text.at(j)-21;
j++;
}
}
        void decoder(){
            int j=0;
        for(int i=0;i<text.length();++i)
        {
                
if(((text.at(j)>='f')&&(text.at(j)<='z'))||((text.at(j)>='F')&&(text.at(j)<='Z')))
text.at(j)=text.at(j)-5;
else if(text.at(j)>'z'||text.at(j)<'A'||((text.at(j)>'Z')&&(text.at(j)<'a')))
;
else
    text.at(j)=text.at(j)+21;
j++;}
}
    private:
    string text;
};

查阅了了其他同学的加密代码后,我这段代码很明显是暴力的。还可以用取余的方式来处理加密过程中因为+5后越界循环回来的问题。

task1:类模板的使用,用法同函数模板,多练掌握语法即可。

task2:2.1 介绍了string.

总结一下就是比如 定义了string s1。

访问单个元素方式有两种  s1[0]或者s1.at(0)

求字符串长度也是两种  s1.size() s1.length()

字符串连接    s2=s1+"xxx"

还有就是 find(“字符串”)算法的调用,如果没有查找到会返回npos

再有就是取子串substr函数涉及重载  ,如果是substr(0, pos);这样的两个参数的函数,就是从0取到pos-1.  但是如果只有一个参数,那么就是从这个位置查到末尾。

task 2.2

cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空输入缓冲区,如果没有这段语句的话,上个输入流中因为空格而截断的输入会直接输入在下个输入里。 所以使用getline可以避免这样的情况。并且,getline可以自己dly截至条件。 task2.3
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s;
    cout<<"Enter words:\n";
    while(getline(cin,s)){
    for(auto &ch:s)
    ch=toupper(ch);
    cout<<s<<endl;
    }    
}
1. 代码line11,把 getline(cin, s) 作为while的循环条件,实现重复录入,直到按下组合键 Ctrl+Z 结束循环。 2. 代码line14,使用了标准库函数 toupper() 实现小写字符-> 大写字符的转换。 3.如果把auto&ch:s中的引用去掉,就不能转换了,因为去掉引用后ch就是仅仅是一个遍历器的作用了,就无法再把大写转化后的结果写入s中了,利用这一点,可以有效地防止循环中数据的修改。 task2.4  transform的应用。 task3.1  vector类构造函数重载。vector<int> v2(5); // 创建一个vector对象v2, 包含5个元素,元素是 int型,初始值是默认值0 vector<int> v3(5, 42); // 创建一个vector对象v3, 包含5个元素,元素是 int型,指定初始值是42 vector<int> v4{1, 9, 8, 4}; // 创建一个vector对象v4, 元素是int型,使用初始化列 表方式 task3.2  vector的空间会动态增长,并且最大容量capicity只会是2的n次方。也就是只会二倍二倍的增加。 task4:
 1 #include<iostream>
 2 #include<vector>
 3 #include<array>
 4 #include<string>
 5 #include<algorithm>
 6 using namespace std;
 7 template <typename T>
 8 void output1(const T &obj)
 9 {
10 for(auto i=0;i<obj.size();++i)
11 cout<<obj.at(i)<<",";
12 cout<<"\b\b\n";
13 }
14 template <typename T>
15 void output2(const T&obj)
16 {for(auto p=obj.cbegin();p!=obj.cend();++p)
17 cout<<*p<<",";
18 cout<<"\b\b\n";
19 }
20 template <typename T>
21 void output3(const T&obj){
22     for(auto &item:obj)
23     cout<<item<<",";
24     cout<<"\b\b\n";
25 }
26 void test1(){
27     string s1{"cplus"};
28     output1(s1);
29     reverse(s1.begin(),s1.end());
30     output2(s1);
31     sort(s1.begin(),s1.end());
32     output3(s1);
33 }
34 void test2()
35 {array<array<int,4>,3>x{1,9,8,4,2,0,2,2,2,0,4,9};
36 output1(x.at(0));
37 output2(x.at(1));
38 output3(x.at(2));
39 }
40 void test3(){
41     vector<string> v1{"sheldon","leonard","howard","raj"};
42     v1.push_back("penny");
43     v1.push_back("Amy");
44     
45     output1(v1);
46     sort(v1.begin(),v1.end(),std::greater<string>());
47     output2(v1);
48     
49 reverse(v1.begin(),v1.end());
50 output3 (v1);    
51     
52     
53     
54 }
55 int main()
56 
57 {
58     cout<<"test1:"<<endl;
59     test1();
60     
61     cout<<"test2:"<<endl;
62     test2();
63     
64     cout<<"test3:"<<endl;
65     test3();
66     
67 }

pushback 和popback都是在末尾插入或者删除。同时 注意sort和reverse算法的语法即可。

标签:Info,第三次,text,v1,vector,实验,include,string
From: https://www.cnblogs.com/xiaozhengcaicai/p/16807849.html

相关文章

  • 实验3 数组、指针与现代C++标准库
    实验5#pragmaonce#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classinfo{public:info(stringnickname0,stringcontact......
  • 实验3
    实验任务51#pragmaonce23#include<iostream>4#include<iomanip>5#include<string>67usingstd::cout;8usingstd::endl;9usingstd::cin;1......
  • 实验五:开源控制器实践——POX
    (一)基本要求1、POX的forwarding.hubh1pingh2h1pingh3h2pingh3结论:将数据包广播转发2、POX的forwarding.l2_learningh1pingh2h1pingh3h2pingh3......
  • 实验三
    Info.hpp#include<iostream>#include<string>usingnamespacestd;classInfo{public:Info(stringname="",stringcon="",stringci="",intnu=0):ni......
  • 实验5:开源控制器实践——POX
    (一)基本要求:1.搭建下图所示SDN拓扑,协议使用OpenFlow1.0,控制器使用部署于本地的POX(默认监听6633端口)1)生成拓扑:sudomn--topo=single,3--mac--controller=remote,ip......
  • 实验三
    实验任务5#pragmaonce#include<iostream>#include<string>usingnamespacestd;classInfo{public:Info(stringnickname1,stringcontact1,stringcity......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • TFboy的实验2
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子......
  • 实验五
    一、实验目的1、能够理解POX控制器的工作原理;2、通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;3、能够运用POX控制器编写自定......
  • Python实验报告——第6章 函数
    实验报告实例01:输出每日一帖(共享版)代码如下:deffunction_tips():'''功能:每天输出一条励志文字'''importdatetime#导入日期时间类#定义......