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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性