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算法的语法即可。

原文地址:http://www.cnblogs.com/xiaozhengcaicai/p/16807849.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性