1.实验任务1-4
1)普通数组、array、vector的相关性,以及,区别:
a)数组和array的大小都是固定的,而vector的大小可以改变。
b)数组和array存储在栈中,而vector存储在堆中。
c)数组只能通过下标访问,而array和vector可以通过at函数访问。
d)数组不允许将对象赋值给另一个对象,而array和vector允许.
e)vector和array提供了更好的遍历机制。
2)迭代器与指针相关性,以及,区别:
a)迭代器不是指针,是类模板,表现的像指针。
b)迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。
c)指针能指向函数而迭代器不行,迭代器只能指向容器。
d)指针是迭代器的一种,指针只能用于某些特定的容器。
3)C风格字符串与string区别:
a)C语言字符串是字符的数组,并用‘\0’来表示字符串结束。
b)string类,使用时不必担心内存是否充足,字符串长度等问题。并且C++中的string类作为一个类,其中集成的操作函数足以完成多数情况下的程序需求。
2. 实验任务5
Info.hpp源码:
1 #ifndef INFO_HPP 2 #define INFO_HPP 3 4 #include<iostream> 5 #include<string> 6 #include<iomanip> 7 8 using namespace std; 9 10 class info { 11 private: 12 string nickname; 13 string contact; 14 string city; 15 int n; 16 public: 17 void print(); 18 info(); 19 int get_n(); 20 }; 21 22 void info::print() { 23 cout<<setw(30)<<setfill(' ')<<left<<"称呼:"<<nickname<<endl; 24 cout<<setw(30)<<setfill(' ')<<left<<"联系方式:"<<contact<<endl; 25 cout<<setw(30)<<setfill(' ')<<left<<"所在城市:"<<city<<endl; 26 cout<<setw(30)<<setfill(' ')<<left<<"预定人数:"<<n<<endl; 27 } 28 info::info() { 29 cin>>nickname; 30 cin>>contact; 31 cin>>city; 32 cin>>n; 33 } 34 int info::get_n() { 35 return n; 36 } 37 38 #endif
task5.cpp源码:
1 #include"info.hpp" 2 #include<iostream> 3 #include<vector> 4 5 using namespace std; 6 7 int main() { 8 cout<<"录入信息:"<<endl<<endl; 9 cout<<"称呼/昵称,联系方式(邮箱/手机号),所在城市,预定参加人数"<<endl; 10 11 const int capacity=100; 12 int num=0; 13 14 vector<info> audience_info_list; 15 16 while(num<capacity) { 17 info s; 18 if(num+s.get_n()>capacity) { 19 cout<<"对不起,只剩"<<capacity-num<<"个位置."<<endl; 20 cout<<"1.输入u,更新(update)预定信息"<<endl 21 <<"2.输入q,退出预定"<<endl; 22 char a; 23 cin>>a; 24 cout<<"你的选择:"<<a<<endl; 25 if(a=='u') continue; 26 else break; 27 } else { 28 audience_info_list.push_back(s); 29 num=num+s.get_n(); 30 if(num==capacity) break; 31 } 32 cout<<"还需要增加预定信息吗?"<<endl; 33 cout<<"1.输入yes,增加预定信息"<<endl 34 <<"2.输入no,退出预定"<<endl; 35 string b; 36 cin>>b; 37 if(b=="yes") continue; 38 else break; 39 } 40 41 cout<<endl; 42 cout<<"截至目前,一共有"<<num<<"位听众预定参加,预定听众信息如下:"<<endl; 43 for(auto i=audience_info_list.begin(); i!=audience_info_list.end(); i++) { 44 i->print(); 45 } 46 }
测试结果截图:
3.实验任务6
TextCoder.hpp源码:
1 #ifndef TEXTCODER_HPP 2 #define TEXTCODER_HPP 3 4 #include<iostream> 5 #include<string> 6 7 using namespace std; 8 9 class TextCoder { 10 private: 11 string text; 12 public: 13 string encoder(); 14 string decoder(); 15 TextCoder(string text0) { 16 text=text0; 17 } 18 }; 19 20 string TextCoder::encoder() { 21 for(int i=0; i<text.size(); i++) { 22 if('a'<=text[i]&&text[i]<='u') { 23 text[i]=text[i]+5; 24 } else if('v'<=text[i]&&text[i]<='z') { 25 text[i]=text[i]-21; 26 } else if('A'<=text[i]&&text[i]<='U') { 27 text[i]=text[i]+5; 28 } else if('V'<=text[i]&&text[i]<='Z') { 29 text[i]=text[i]-21; 30 } 31 } 32 return text; 33 } 34 string TextCoder::decoder() { 35 for(int i=0; i<text.size(); i++) { 36 if('f'<=text[i]&&text[i]<='z') { 37 text[i]=text[i]-5; 38 } else if('a'<=text[i]&&text[i]<='e') { 39 text[i]=text[i]+21; 40 } else if('F'<=text[i]&&text[i]<='Z') { 41 text[i]=text[i]-5; 42 } else if('A'<=text[i]&&text[i]<='E') { 43 text[i]=text[i]+21; 44 } 45 } 46 return text; 47 } 48 49 #endif
task5.cpp源码:
1 #include "textcoder.hpp" 2 #include <iostream> 3 #include <string> 4 5 int main() { 6 using namespace std; 7 8 string text, encoded_text, decoded_text; 9 10 cout << "输入英文文本: "; 11 while (getline(cin, text)) { 12 encoded_text = TextCoder(text).encoder(); // 这里使用的是临时无名对象 13 cout << "加密后英文文本:\t" << encoded_text << endl; 14 15 decoded_text = TextCoder(encoded_text).decoder(); // 这里使用的是临时无名对象 16 cout << "解密后英文文本:\t" << decoded_text << endl; 17 cout << "\n输入英文文本: "; 18 } 19 }
测试结果截图: