Check if given email address is valid or not in C++ - GeeksforGeeks

26 Oct, 2020
Given a string email that denotes an Email Address, the task is to check if the given string is a valid email id or not. If found to be true, then print “Valid”. Otherwise, print “Invalid”. A valid email address consists of an email prefix and an email domain, both in acceptable formats:
The email address must start with a letter (no numbers or symbols).
There must be an @ somewhere in the string that is located before the dot.
There must be text after the @ symbol but before the dot.
There must be a dot and text after the dot.
Examples:
Input: email = “contribute@geeksforgeeks.org” Output: ValidExplanation:The given string follow all the criteria for an valid email string.
Input: email = “contribute@geeksforgeeks..org”Output: Invalid
String Traversal based Approach: Follow the steps below:
Check if the first character of the email id string is an alphabet or not. If not, then the email is Invalid.Now traverse over the string email to find the position the “@” and “.” If “@” or “.” is not present then the email is Invalid.If “.” is not present after “@” then the email is Invalid.If “.” is the last character of the string email then the email id is Invalid.Otherwise, the email is Valid.
Check if the first character of the email id string is an alphabet or not. If not, then the email is Invalid.
Now traverse over the string email to find the position the “@” and “.” If “@” or “.” is not present then the email is Invalid.
If “.” is not present after “@” then the email is Invalid.
If “.” is the last character of the string email then the email id is Invalid.
Otherwise, the email is Valid.
Below is the implementation of the above approach:
C++
// C++ program for the above approach  #include <bits/stdc++.h>using namespace std;  // Function to check the character// is an alphabet or notbool isChar(char c){    return ((c >= 'a' && c <= 'z')            || (c >= 'A' && c <= 'Z'));}  // Function to check the character// is an digit or notbool isDigit(const char c){    return (c >= '0' && c <= '9');}  // Function to check email id is// valid or notbool is_valid(string email){    // Check the first character    // is an alphabet or not    if (!isChar(email[0])) {          // If it's not an alphabet        // email id is not valid        return 0;    }    // Variable to store position    // of At and Dot    int At = -1, Dot = -1;      // Traverse over the email id    // string to find position of    // Dot and At    for (int i = 0;         i < email.length(); i++) {          // If the character is '@'        if (email[i] == '@') {              At = i;        }          // If character is '.'        else if (email[i] == '.') {              Dot = i;        }    }      // If At or Dot is not present    if (At == -1 || Dot == -1)        return 0;      // If Dot is present before At    if (At > Dot)        return 0;      // If Dot is present at the end    return !(Dot >= (email.length() - 1));}  // Driver Codeint main(){    // Given string email    string email = "contribute@geeksforgeeks.org";      // Function Call    bool ans = is_valid(email);      // Print the result    if (ans) {        cout << email << " : "             << "valid" << endl;    }    else {        cout << email << " : "             << "invalid" << endl;    }      return 0;}
contribute@geeksforgeeks.org : valid

Time Complexity: O(N)Auxiliary Space: O(1)
Regular Expression based Approach: The given problem can also be solved using Regular Expression. Below are the steps:
Get the email string.
Create a regular expression to check the valid email as mentioned below:
regex = “(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+”
Match the given string email with the regular expression. In C++, this can be done by using regex_match().
Print “Valid” if the given string email matches with the given regular expression, else return “Invalid”.
Below is the implementation of the above approach:
C++
// C++ program for the above approach  #include <iostream>#include <regex>using namespace std;  // Function to check the email id// is valid or notbool isValid(const string& email){      // Regular expression definition    const regex pattern(        "(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+");      // Match the string pattern    // with regular expression    return regex_match(email, pattern);}  // Driver Codeint main(){    // Given string email    string email        = "contribute@geeksforgeeks.org";      // Function Call    bool ans = isValid(email);      // Print the result    if (ans) {        cout << email << " : "             << "valid" << endl;    }    else {        cout << email << " : "             << "invalid" << endl;    }}
contribute@geeksforgeeks.org : valid

Time Complexity: O(N)Auxiliary Space: O(1)
CPP-regex
regular-expression
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 50 String Coding Problems for Interviews
Naive algorithm for Pattern Searching
Vigenère Cipher
Hill Cipher
Count words in a given string
How to Append a Character to a String in C
Convert character array to string in C++
sprintf() in C
Program to count occurrence of a given character in a string
Converting Roman Numerals to Decimal lying between 1 to 3999