#include #include #include #include #include #include #include using namespace std; std::string mail; std::vector lines; bool isLineEmpty(const std::string& line) { for(int i = 0 ; i < line.length(); i++){ if ( line[i] != ' ' && line[i] != '\n'){ return false; } } return true; } std::string getConentsOf(const std::string& tag) { for(int i = 0 ; i < lines.size(); i++){ int n = lines[i].find(tag); if ( n != std::string::npos ){ return lines[i].substr(n+tag.length()); } } return ""; } vector splitBy(const std::string& string, char splitBy) { vector result; for(int i = 0; i < string.length(); i++) { int n = string.find(splitBy, i) ; if ( n != std::string::npos){ result.push_back(string.substr(i, n - i)); i = n; } else{ result.push_back(string.substr(i)); return result; } } return result; } string trim(const std::string& s) { string res = s; while(res.front() == ' '){ res = res.substr(1); } while(res.back() == ' '){ res.pop_back(); } return res; } bool isMailValid(const std::string& mail) { if ( isLineEmpty(mail) ) return true; if ( !( mail[0] >= 'a' && mail[0] <= 'z' && mail.back() >= 'a' && mail.back() <= 'z') ) return false; for(int i = 0; i < mail.length();i++){ if ( !( mail[i] >= 'a' && mail[i] <= 'z') && mail[i] != '.' && mail[i] != '@' ) return false; } int i = std::count(mail.begin(), mail.end(), '@'); if ( i != 1 ){ return false; } int n = mail.find('@'); int n1 = mail.find('.', n); if ( n1 == string::npos ) return false; if ( mail.find(".@", n) != string::npos || mail.find("@.", n) != string::npos ) return false; return true; } bool areMailsValid(const std::string& mail) { vector mails = splitBy(mail, ','); for(int i = 0; i < mails.size() ;i++){ if ( !isMailValid(trim(mails[i])) ) return false; } return true; } int main() { ifstream in("email.in"); while(!in.eof() ){ char line[1024]; in.getline(line,1024); mail += line; lines.push_back(line); } ofstream out("email.out"); std::string from = getConentsOf("from:"); std::string to = getConentsOf("to:"); std::string cc = getConentsOf("cc:"); std::string bcc = getConentsOf("bcc:"); std::string subject = getConentsOf("subject:"); std::string body = getConentsOf("body:"); std::string attachment = getConentsOf("attachment:"); if ( isLineEmpty(from) ){ out << 1 << endl; } else if( isLineEmpty(to) && isLineEmpty(cc) && isLineEmpty(bcc) ) { out << 2 << endl; } else if( !isMailValid(trim(from)) || !areMailsValid(to) || !areMailsValid(cc) || !areMailsValid(bcc) ) { out << 3 << endl; } else if ( isLineEmpty( subject ) ){ out << 100 << endl; } else{ out << 0 << endl; } return 0; }