zoukankan      html  css  js  c++  java
  • UVA_814

    一道题干特别复杂的题,模拟邮件的发送,把每一个地址保存下来, 然后在搜索能否找到匹配的地址。逻辑并不复杂就是输出输入格式有点绕。

    #include<iostream>
    #include<string>
    #include<vector>
    #include<set>
    #include<map>
    using namespace std;
    
    void parse_address(const string& s, string &user, string& mta){
        int k=s.find('@');
        user=s.substr(0,k);
        mta=s.substr(k+1);
    }
    
    int main(){
        int k;
        string s,t,user1,mta1,user2,mta2;
        set<string> addr;
    
        //输入所有MTA,转化为地址列表
        while(cin>>s && s!="*"){
            cin>>s>>k;
            while(k--){ cin>>t; addr.insert(t+"@"+s);}
        }
    
        while(cin>>s && s!="*"){
            parse_address(s,user1,mta1);//处理发件人地址
            vector<string> mta;//所有需要连接的mta,按照输入顺序
            map<string, vector<string> > dest;//每个MTA需要发送的用户
            set<string> vis;
            
            while(cin>>t && t!="*"){
                parse_address(t,user2,mta2);//处理收件人地址
                if(vis.count(t)) continue;//重复的收件人
                vis.insert(t);
                if(!dest.count(mta2)){
                    mta.push_back(mta2);
                    dest[mta2]=vector<string>();
                }
                dest[mta2].push_back(t);
            }
            getline(cin,t);//把'*'这一行的回车吃掉
    
            //输入文件正文
            string data;
            while(getline(cin,t) && t[0]!='*') 
                data+="     "+t+"
    ";
            for(int i=0;i<mta.size();i++){
                string mta2=mta[i];
                vector<string> users=dest[mta2];
                cout<<"Connection between "<<mta1<<" and "<<mta2<<endl;
                cout<<"     HELO "<<mta1<<"
    ";cout<<"     250
    ";
                cout<<"     MAIL FROM:<"<<s<<">
    ";cout<<"     250
    ";
                bool ok=false;
                for(int i=0;i<users.size();i++){
                    cout<<"     RCPT TO:<"<<users[i]<<">
    ";
                    if(addr.count(users[i])){ok=true;cout<<"     250
    ";}
                    else cout<<"     550
    ";
                }
                if(ok){
                    cout<<"     DATA
    ";cout<<"     354
    ";
                    cout<<data;
                    cout<<"     .
    ";cout<<"     250
    ";
                }
                cout<<"     QUIT
    ";cout<<"     221
    ";
            }
        }
        return 0;
    }
  • 相关阅读:
    Hibernate4集成 Annotation使用教程
    搭建SSH入过的那些坑
    Tomcat配置虚拟目录
    java中类名.class、实例.getclass()区别
    nginx使用ssl模块配置HTTPS支持
    nginx安装配置域名转发
    RedHat安装DB2详细步骤(附卸载、备份恢复步骤)
    iOS学习笔记-084.粒子效果——路径移动
    iOS APP打包上传到AppStore的最新步骤
    git使用命令, 特别:git checkout -b a 与 git branch a区别
  • 原文地址:https://www.cnblogs.com/jaszzz/p/13033977.html
Copyright © 2011-2022 走看看