1.实验任务1
程序源码
task1_1
#include <iostream> using std::cout; using std::endl; class A{ public: A(int x0, int y0): x{ x0 }, y{ y0 } {} void show() const { cout << x << ", " << y << endl; } private: int x, y; }; class B{ public: B(double x0, double y0): x{ x0 }, y{ y0 } {} void show() const { cout << x << ", " << y << endl;} private: double x, y; }; int main() { A a(3, 4); a.show(); B b(3.2, 5.6); b.show(); }
测试截图
task1_2
#include <iostream> #include <string> using std::cout; using std::endl; template<typename T> class X{ public: X(T x0, T y0): x{x0}, y{y0} {} void show() const { cout << x << ", " << y << endl;} private: T x, y; }; int main() { X<int> x1(3, 4); x1.show(); X<double> x2(3.2, 5.6); x2.show(); X<std::string> x3("hello", "c plus plus"); x3.show(); }
测试截图
2.实验任务2
程序源码
task2_1
#include <iostream> #include <string> int main() { using namespace std; string s1, s2; s1 = "nuist"; s1[0] = 'N'; s1.at(1) = 'U'; cout << boolalpha << (s1 == "nuist") << endl; cout << s1.length() << endl; cout << s1.size() << endl; s2 = s1 + ", 2050"; cout << s2 << endl; string email{"[email protected]"}; auto pos = email.find("@"); if (pos == string::npos) cout << "illegal email address"; else { auto s1 = email.substr(0, pos); auto s2 = email.substr(pos + 1); cout << s1 << endl; cout << s2 << endl; } string phone{"15216982937"}; cout << phone.replace(3, 5, string(5, '*')) << endl; string s3{"cosmos"}, s4{"galaxy"}; cout << "s3: " + s3 + " s4: " + s4 << endl; s3.swap(s4); cout << "s3: " + s3 + " s4: " + s4 << endl; string s5{"abc"}; const char *pstr = s5.c_str(); cout << pstr << endl; string s6{"12306"}; int x1 = stoi(s6); cout << x1 << endl; int x2 = 12306; string s7 = to_string(x2); cout << s7 << endl; double x3 = 123.06; string s8 = to_string(x3); cout << s8 << endl; }
测试截图
程序源码
task2_2
#include <iostream> #include <string> #include <limits> int main() { using namespace std; const int n = 10; string prompt = string(n, '*') + "Enter a string: " + string(n, '*') + '\n'; cout << prompt; string s1; cin >> s1; // 从输入流中提取字符串给s1,碰到空格、回车、Tab键即结束 cout << "s1: " << s1 << endl; cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空输入缓冲区 cout << prompt; getline(cin, s1); // 从输入流中提取一行字符串给s1,直到换行 cout << "s1: " << s1 << endl; string s2, s3; cout << prompt; getline(cin, s2, ' '); // 从输入流中提取字符串给s2,直到指定分隔符空格 getline(cin, s3); cout << "s2: " << s2 << endl; cout << "s3: " << s3 << endl; }
测试截图
程序源码
task2_3
#include <iostream> #include <string> int main() { using namespace std; string s; cout << "Enter words: \n"; while( getline(cin, s) ) { for(auto &ch: s) ch = toupper(ch); cout << s << "\n"; } }
测试截图
程序源码
task2_4
#include <iostream> #include <string> #include <algorithm> int main() { using namespace std; string s1; cout << "Enter words: \n"; getline(cin, s1); cout << "original words: \n"; cout << s1 <<endl; cout << "to uppercase: \n"; transform(s1.begin(), s1.end(), s1.begin(), ::toupper); cout << s1 << endl; }
测试截图
3.实验任务3
程序源码
task3_1
#include <iostream> #include <vector> template<typename T> void output(const T &obj) { for(auto &item: obj) std::cout << item << ", "; std::cout << "\b\b \n"; } int main() { using namespace std; vector<int> v1; // 创建一个vector对象v1, 未指定大小, 元素是int型, 未初始化 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型,使用初始化列表方式 vector<int> v5{v4}; // 创建一个vector对象v5, 使用已经存在的对象v4创建 output(v2); output(v3); output(v4); output(v5); }
测试截图
程序源码
task3_2
#include <iostream> #include <vector> using std::cout; using std::endl; using std::vector; void output(const vector<int> &v) { cout << "v.size() = " << v.size() << endl; cout << "v.capacity() = " << v.capacity() << endl; cout << endl; } int main() { vector<int> v{42}; output(v); v.push_back(55); v.push_back(90); output(v); for(auto i = 0; i < 8; ++i) v.push_back(i); output(v); v.pop_back(); output(v); }
测试截图
4.实验任务4
程序源码
task4
#include <iostream> #include <vector> #include <array> #include <string> #include <algorithm> using namespace std; // 函数模板 // 通过索引方式输出对象值 template<typename T> void output1(const T &obj) { for(auto i = 0; i < obj.size(); ++i) cout << obj.at(i) << ", "; cout << "\b\b \n"; } // 函数模板 // 通过迭代器方式输出对象值 template<typename T> void output2(const T &obj) { for(auto p = obj.cbegin(); p != obj.cend(); ++p) cout << *p << ", "; cout << "\b\b \n"; } // 函数模板 // 通过auto for方式输出对象值 template<typename T> void output3(const T &obj) { for(auto &item: obj) cout << item << ", "; cout << "\b\b \n"; } // 测试string类对象 void test1() { string s1{"cplus"}; output1(s1); reverse(s1.begin(), s1.end()); // 对对象s1中的数据项进行翻转 output2(s1); sort(s1.begin(), s1.end()); // 对对象s1中的数据项排序(默认升序) output3(s1); } // 测试array<int>类对象 void test2() { array< array<int, 4>, 3> x{1, 9, 8, 4, 2, 0, 2, 2, 2, 0, 4, 9 }; output1( x.at(0) ); output2( x.at(1) ); output3( x.at(2) ); } // 测试vector<string>类对象 void test3() { vector<string> v1 {"Sheldon", "Leonard", "Howard", "Raj"}; v1.push_back("Penny"); v1.push_back("Amy"); output1(v1); sort(v1.begin(), v1.end(), std::greater<string>()); // 对v1对象中的字符串按降序排序 output2(v1); reverse(v1.begin(), v1.end()); // 对v1对象中的字符串翻转 output3(v1); } int main() { cout << "test1: " << endl; test1(); cout << "test2: " << endl; test2(); cout << "test3: " << endl; test3(); }
测试截图
5.实验任务5
程序源码
info.hpp
#include<iostream> #include<string> #include<iomanip> using namespace std; class info{ public: info(string name,string contact,string city,int n); ~info()=default; void print(); int get_total(); private: string nickname; string contact; string city; int n; static int total; }; int info::total=0; info::info(string name,string contact,string city,int n):nickname{name},contact{contact},city{city},n{n}{ total+=n; } int info::get_total(){ return total; } void info::print(){ cout<<setw(10)<<"称呼:"<<nickname<<endl <<setw(10)<<"联系方式:"<<contact<<endl <<setw(10)<<"所在城市:"<<city<<endl <<setw(10)<<"预定人数:"<<n<<endl<<endl; }
task5.cpp
#include"info.hpp" #include<vector> #include<iomanip> using namespace std; static int i=0; const int capacity=100; int main(){ vector<info>audience_info_list; string name,contact,city; int n; char ch; cout<<"录入信息:"<<endl; cout<<std::left<<"昵称\t" <<"联系方式(邮箱/手机号)\t\t" <<"所在城市\t" <<"预定参加人数\t"<<endl; while(cin>>name) { cin>>contact >>city >>n; if(i+n<=capacity) { info t(name,contact,city,n); audience_info_list.push_back(t); i+=n; if(i==capacity) break; } else { cout<<"对不起,只剩"<<capacity-i<<"个位置."<<endl; cout<<"1.输入u,更新(update)预定信息"<<endl <<"2.输入q,退出预定"<<endl; cout<<"你的选择:"; cin>>ch; if(ch=='u') cout<<"请重新录入信息:"<<endl; else { cout<<endl; break; } } } cout<<endl; cout<<"截至目前,一共有"<<i<<"位听众预定参加。预定听众信息如下:"<<endl; for(auto list:audience_info_list) list.print(); }
测试截图
6.实验任务6
程序源码
textcoder.hpp
#include<iostream> #include<string> using namespace std; class TextCoder{ public: TextCoder(string text); ~TextCoder()=default; string get_ciphertext(); string get_deciphertext(); private: string text; void encoder(); void decoder(); }; TextCoder::TextCoder(string text):text{text}{} void TextCoder::encoder(){ for(int i=0;i<text.length();i++) { if((text[i]>='f'&&text[i]<='z')||(text[i]>='F'&&text[i]<='Z')) { text[i]-=5; } else if((text[i]>='a'&&text[i]<='e')||(text[i]>='A'&&text[i]<='E')) { text[i]+=21; } } } void TextCoder::decoder() { for(int i=0;i<text.length();i++) { if((text[i]>='a'&&text[i]<='u')||(text[i]>='A'&&text[i]<='U')) { text[i]+=5; } else if((text[i]>='V'&&text[i]<='Z')||(text[i]>='v'&&text[i]<='z')) { text[i]-=21; } } } string TextCoder::get_ciphertext(){ encoder(); return text; } string TextCoder::get_deciphertext(){ decoder(); return text; }
task6.cpp
#include "textcoder.hpp" #include <iostream> #include <string> void test() { using namespace std; string text, encoded_text, decoded_text; cout << "输入英文文本: "; while (getline(cin, text)) { encoded_text = TextCoder(text).get_ciphertext(); // 这里使用的是临时无名对象 cout << "加密后英文文本:\t" << encoded_text << endl; decoded_text = TextCoder(encoded_text).get_deciphertext(); // 这里使用的是临时无名对象 cout << "解密后英文文本:\t" << decoded_text << endl; cout << "\n输入英文文本: "; } } int main() { test(); }
测试截图
标签:std,string,int,text,cout,c++,数组,include,指针 From: https://www.cnblogs.com/xu2993610/p/16807044.html