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