Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 = “review-team@geeksforgeeks.org” 
Output: Valid
Explanation:
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:

  1. Check if the first character of the email id string is an alphabet or not. If not, then the email is Invalid.
  2. Now traverse over the string email to find the position the “@” and “.” If “@” or “.” is not present then the email is Invalid.
  3. If “.” is not present after “@” then the email is Invalid.
  4. If “.” is the last character of the string email then the email id is Invalid.
  5. 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 not
bool isChar(char c)
{
    return ((c >= 'a' && c <= 'z')
            || (c >= 'A' && c <= 'Z'));
}
  
// Function to check the character
// is an digit or not
bool isDigit(const char c)
{
    return (c >= '0' && c <= '9');
}
  
// Function to check email id is
// valid or not
bool 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 Code
int main()
{
    // Given string email
    string email = "review-team@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;
}


Output:

review-team@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 not
bool 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 Code
int main()
{
    // Given string email
    string email
        = "review-team@geeksforgeeks.org";
  
    // Function Call
    bool ans = isValid(email);
  
    // Print the result
    if (ans) {
        cout << email << " : "
             << "valid" << endl;
    }
    else {
        cout << email << " : "
             << "invalid" << endl;
    }
}


Output:

review-team@geeksforgeeks.org : valid

Time Complexity: O(N)
Auxiliary Space: O(1)



Last Updated : 26 Oct, 2020
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads