原题链接:https://vjudge.net/problem/UVA-814
分类:STL综合
备注:字符串以及STL容器的综合运用
前言:uDebug AndyRoswellD的数据没过,但是我没看懂他的输出的逻辑,难道有多个传输者?题目没这么写啊,好歹还是AC了。个人认为是他上传的数据有误。
代码如下:
#include<iostream>
#include<sstream>
#include<string>
#include<map>
#include<set>
#include<vector>
using namespace std;
map<string, set<string> >person;
set<string>adress;
void output(string s, vector<string>message) {
stringstream ss(s);
string sender, senddress;
ss >> sender;
int pos = sender.find('@');
senddress = sender.substr(pos + 1);
string tmp, dr;
vector<string>recdress;
vector<string>recpt;
map<string, set<string> >match;
while (ss >> tmp) {
pos = tmp.find('@');
dr = tmp.substr(pos + 1);
if (!match.count(dr))recdress.push_back(dr);
if (!match[dr].count(tmp)) {
recpt.push_back(tmp);
match[dr].insert(tmp);
}
}
for (int i = 0; i < recdress.size(); i++) {
cout << "Connection between " << senddress << " and " << recdress[i] << "\n";
cout << " HELO " << senddress << "\n 250\n MAIL FROM:<" << sender << ">\n 250\n";
int flag = 0;
for (int j = 0; j < recpt.size(); j++) {
if (match[recdress[i]].count(recpt[j])) {
cout << " RCPT TO:<" << recpt[j] << ">\n";
pos = recpt[j].find('@');
string tmp2 = recpt[j].substr(0, pos);
if (person[recdress[i]].count(tmp2)) {
cout << " 250\n";
flag = 1;
}
else cout << " 550\n";
}
}
if (flag) {
cout << " DATA\n 354\n";
for (int k = 0; k < message.size(); k++)
cout << " " << message[k] << "\n";
cout << " .\n 250\n";
}
cout << " QUIT\n 221\n";
}
}
int main(void){
int n;
string s, pepo;
while (cin >> s){
if (s[0] == '*')break;
cin >> s;
adress.insert(s);
cin >> n;
while (n--) {
cin >> pepo;
person[s].insert(pepo);
}
}
getchar();
while (getline(cin,s)){
if (s[0] == '*')break;
string mess;
cin >> mess;
getchar();
vector<string>message;
while (getline(cin, mess)){
if (mess[0] == '*')break;
message.push_back(mess);
}
output(s, message);
}
return 0;
}
版权声明:本文为TK_wang_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。