📌  相关文章
📜  检查给定的电子邮件地址在 C++ 中是否有效

📅  最后修改于: 2021-09-07 02:54:23             🧑  作者: Mango

给定一个表示电子邮件地址的字符串电子邮件,任务是检查给定的字符串是否是有效的电子邮件 ID。如果发现为真,则打印“Valid” 。否则,打印“无效”有效的电子邮件地址由电子邮件前缀和电子邮件域组成,两者均采用可接受的格式:

  • 电子邮件地址必须以字母开头(无数字或符号)。
  • 在位于点之前的字符串中的某处必须有一个@
  • @符号之后但点之前必须有文本。
  • 点后面必须有一个点和文本。

例子:

基于字符串遍历的方法:按照以下步骤操作:

  1. 检查电子邮件 ID字符串的第一个字符是否为字母。如果不是,则电子邮件为Invalid
  2. 现在遍历字符串电子邮件以找到“@”“.”的位置如果“@”“.”不存在则电子邮件无效
  3. 如果“.” “@”之后不存在,则电子邮件无效
  4. 如果“.”是字符串email的最后一个字符,则电子邮件 ID 为Invalid
  5. 否则,电子邮件是Valid

下面是上述方法的实现:

C++
// C++ program for the above approach
  
#include 
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 = "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;
}


C++
// C++ program for the above approach
  
#include 
#include 
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
        = "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

时间复杂度: O(N)
辅助空间: O(1)

基于正则表达式的方法:也可以使用正则表达式解决给定的问题。以下是步骤:

  • 获取电子邮件字符串。
  • 创建一个正则表达式来检查有效的电子邮件,如下所述:
  • 将给定的字符串电子邮件与正则表达式匹配。在 C++ 中,这可以通过使用 regex_match() 来完成。
  • 如果给定的字符串email与给定的正则表达式匹配,则打印“Valid” ,否则返回“Invalid”

下面是上述方法的实现:

C++

// C++ program for the above approach
  
#include 
#include 
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
        = "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

时间复杂度: O(N)
辅助空间: O(1)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live