1. 程式人生 > 其它 >語法糖甜不甜?巧用列舉實現“狀態”轉換限制

語法糖甜不甜?巧用列舉實現“狀態”轉換限制

#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用法影響深刻。