Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <regex>
- #include <chrono>
- #include <iostream>
- char mail[] = "pippo.paperino234@some.contoso.com";
- bool isValidEmail(char* mail) {
- int len = strlen(mail);
- char c;
- int position = 0;
- // check first character
- c = mail[position++];
- if(!((c >= 'A' && c <= 'z') || (c >= '0' && c <= '9'))) return false;
- // check first group before '@'
- c = mail[position++];
- do {
- if(!((c >= 'A' && c <= 'z') || (c >= '0' && c <= '9') || c == '.')) return false;
- c = mail[position++];
- } while (c != '@' && position < len);
- if(position >= len) return false;
- // do the second group
- c = mail[position++];
- if(!((c >= 'A' && c <= 'z') || (c >= '0' && c <= '9'))) return false;
- c = mail[position++];
- do {
- if(!((c >= 'A' && c <= 'z') || (c >= '0' && c <= '9'))) return false;
- c = mail[position++];
- } while (c != '.' && position < len);
- if(position >= len) return false;
- // now we could have something that ends in only letters
- do {
- c = mail[position++];
- if(!((c >= 'A' && c <= 'z') || (c >= '0' && c <= '9'))) return false;
- do {
- if(!((c >= 'A' && c <= 'z') || (c >= '0' && c <= '9'))) return false;
- c = mail[position++];
- } while (c != '.' && position < len);
- if(position >= len && c == '.') return false;
- } while(position < len);
- return true;
- }
- int main(int argc, char** argv) {
- auto start = std::chrono::system_clock::now();
- {
- bool valid;
- for(int i = 0; i < 1000000; i++) valid = isValidEmail(mail);
- auto end = std::chrono::system_clock::now();
- auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
- std::cout << "Time for sequential version: " << elapsed.count() << " ms, value: " << valid << std::endl;
- }
- const std::regex mail_regex("^[A-z0-9][A-z0-9\\.]+@([A-z0-9]+\\.)+[A-z]+$");
- {
- bool valid;
- for(int i = 0; i < 1000000; i++) valid = std::regex_match(mail, mail_regex);
- auto end = std::chrono::system_clock::now();
- auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
- std::cout << "Time for regex version: " << elapsed.count() << " ms, value: " << valid << std::endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement