C++ 如何提示用户在C+中输入正确的电子邮件地址格式+;?

C++ 如何提示用户在C+中输入正确的电子邮件地址格式+;?,c++,C++,基本上,我希望限制用户输入正确格式的电子邮件地址,代码如下 cout << "Donor's Email: "; cin >> email; while (email != "@" && email != "."){ cout << "Please enter correct email format." << endl; cout << "Donor's Email: ";

基本上,我希望限制用户输入正确格式的电子邮件地址,代码如下

 cout << "Donor's Email: ";
 cin >> email;
     while (email != "@" && email != "."){
     cout << "Please enter correct email format." << endl;
     cout << "Donor's Email: ";
     cin >> email;
     }
cout>email;
while(email!=“@”&&email!=”){

难道你不想否定你的条件吗

while (!(email != "@" && email != "."))
通过应用德摩根定律,它简化为

while (email == "@" || email == ".")

但这似乎是对有效性的一个不足的检查(当然,<代码>”@“/Cord>也是无效的”。考虑使用正则表达式库<代码> STD::ReXEX < /Cord>C,从C++ 11中,Google“有效的电子邮件地址的正则表达式”.

没有尝试,但如果您使用的是C++11,则可以使用
std::regex

从您的代码可以是:

 #include <regex>
 using namespace std;

 const regex pattern("(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+");
 cout << "Donor's Email: ";
 cin >> email;
      while (!regex_match(email, pattern)){
      cout << "Please enter correct email format." << endl;
      cout << "Donor's Email: ";
      cin >> email;
      }
#包括
使用名称空间std;
常量正则表达式模式(“(\\w+)(\\.\.\124;\)(\\ w*)@(\\w+)(\\.(\\w+)+”);
cout>电子邮件;
而(!regex_匹配(电子邮件,模式)){

这不会有帮助。看起来该用户将相等性检查与子字符串搜索混淆了。也就是说,他们想检查字符串是否同时包含
@
.Meh。正则表达式解决方案仍然合适。并且逐字符检查不会删除多个“@”字符,除非您采取额外的步骤。但是你甚至没有在你的答案中提供解决方案……而且你的大部分答案仍然是错误的。@interjay:也许你可以告诉我们应该如何回答?我不喜欢回答这样费劲的问题。但是“谷歌如何使用正则表达式”充其量只是一个注释。我不明白你为什么要保留答案的第一部分,因为它显然是错误的。
=
!=
比较整个字符串。看起来你实际上想检查它是否包含字符。看看这里使用正则表达式的情况[你能把它编成可编译的代码吗?另外,我避免提供一个真正的正则表达式,因为不存在一个适用于所有可能情况的正则表达式!我想这是一个相当复杂的问题。这里:我知道没有一个正则表达式适用于每封电子邮件,但既然这样做正确,复杂性会增加值得注意的是,我决定给出一个快速修复的答案。再次,我没有尝试这段代码。是的,这并不简单;我曾考虑在我的答案中粘贴RFC 5322正则表达式,但考虑得更好;-)所有这些都说明,我想你所拥有的是一个足够好的下降替代了上升投票。如果你这样做,堆栈溢出将达到它的要求E