語法糖甜不甜?巧用列舉實現“狀態”轉換限制
阿新 • • 發佈:2021-10-14
#ifndef INFO_HPP #define INFO_HPP #include<iostream> #include<string> #include<vector> using namespace std; class info{ public: info(string a,string b,string c,int m):nickname(a),contact(b),city(c),n(m){ } void print(); private: string nickname,contact,city;int n; }; void info::print() { cout<<"稱呼: "<<nickname<<endl; cout<<"聯絡方式: "<<contact<<endl; cout<<"所在城市: "<<city<<endl; cout<<"預定人數: "<<n<<endl; } #endif #include "info.hpp" #include<iostream> #include<vector> #include<string> int main() { using namespace std; cout<<"錄入資訊"<<endl<<endl; cout<<"稱呼/暱稱,聯絡方式(郵箱或手機號),所在城市,預定參加人數"<<endl; vector<info> audience_info_list; const int capacity=100; int i=0, k=0,h; string s1,s2,s3; int d; while((cin>>s1)&&(cin>>s2)&&(cin>>s3)&&(cin>>d)) { audience_info_list.push_back(info(s1,s2,s3,d)); k=k+d; if(k>=100) { h=100-(k-d); cout<<"對不起,只剩"<<h<<"個座位."<<endl; break; } i++; } if(k<100) { int j; cout<<"截至目前,一共有"<<k<<"位聽眾預定參加。預定觀眾資訊如下"<<endl; for(j=0;j<i;j++) { audience_info_list.at(j).print(); } } else { cout<<"1.輸入u,更新(update)預定資訊"<<endl; cout<<"2.輸入q,退出預定"<<endl; string z; cout<<"你的選擇:"; cin>>z; cout<<endl<<"截至目前,一共有"<<(k-d)<<"位聽眾預定參加。預定觀眾資訊如下"<<endl; for(int j=0;j<i;j++) { audience_info_list[j].print(); } } }
#ifndef TEXTCODER_HPP #define TEXTCODER_HPP #include<iostream> #include<string> using namespace std; class TextCoder{ public: TextCoder(string a):text(a){ } string encoder(); string decoder(); private: string text; }; string TextCoder::encoder() { for(int i=0;i<text.length();i++) { if((text[i]>='a'&&text[i]<='u')||(text[i]>='A'&&text[i]<='U')) text[i]=text[i]+5; else if((text[i]>='v'&&text[i]<='z')||(text[i]>='V'&&text[i]<='Z')) text[i]=text[i]-21; } return text; } string TextCoder::decoder() { for(int i=0;i<text.length();i++) { if((text[i]>='f'&&text[i]<='z')||(text[i]>='F'&&text[i]<='Z')) text[i]=text[i]-5; else if((text[i]>='a'&&text[i]<='e')||(text[i]>='A'&&text[i]<='E')) text[i]=text[i]+21; } return text; } #endif #include "textcoder.hpp" #include <iostream> #include <string> int main() { using namespace std; string text, encoded_text, decoded_text; cout << "輸入英文文字: "; while (getline(cin, text)) { encoded_text = TextCoder(text).encoder(); // 這裡使用的是臨時無名物件 cout << "加密後英文文字:\t" << encoded_text << endl; decoded_text = TextCoder(encoded_text).decoder(); // 這裡使用的是臨時無名物件 cout << "解密後英文文字:\t" << decoded_text << endl; cout << "\n輸入英文文字: "; } }
此次實驗,我學習到了許多string類的一些成員函式的用法,例如getline等,也對vector有了新的的認識,對push_back用法影響深刻。