给定一个表示电子邮件地址的字符串电子邮件,任务是检查给定的字符串是否是有效的电子邮件 ID。如果发现为真,则打印“Valid” 。否则,打印“无效” 。有效的电子邮件地址由电子邮件前缀和电子邮件域组成,两者均采用可接受的格式:
- 电子邮件地址必须以字母开头(无数字或符号)。
- 在位于点之前的字符串中的某处必须有一个@ 。
- @符号之后但点之前必须有文本。
- 点后面必须有一个点和文本。
例子:
Input: email = “contribute@geeksforgeeks..org”
Output: Invalid
基于字符串遍历的方法:按照以下步骤操作:
- 检查电子邮件 ID字符串的第一个字符是否为字母。如果不是,则电子邮件为Invalid 。
- 现在遍历字符串电子邮件以找到“@”和“.”的位置。如果“@”或“.”不存在则电子邮件无效。
- 如果“.” “@”之后不存在,则电子邮件无效。
- 如果“.”是字符串email的最后一个字符,则电子邮件 ID 为Invalid 。
- 否则,电子邮件是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)
基于正则表达式的方法:也可以使用正则表达式解决给定的问题。以下是步骤:
- 获取电子邮件字符串。
- 创建一个正则表达式来检查有效的电子邮件,如下所述:
regex = “(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+”
- 将给定的字符串电子邮件与正则表达式匹配。在 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